summaryrefslogtreecommitdiffstats
path: root/sys/fs/msdosfs
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2010-02-28 17:10:41 +0000
committerkib <kib@FreeBSD.org>2010-02-28 17:10:41 +0000
commit11cf2ecaee883581cf49f4bea644f97d88e289da (patch)
tree525f25a4ffd309d1b864039ca2b805981cb17090 /sys/fs/msdosfs
parent21f579c3fb6b782ee610255d7f5bbb22e326b66c (diff)
downloadFreeBSD-src-11cf2ecaee883581cf49f4bea644f97d88e289da.zip
FreeBSD-src-11cf2ecaee883581cf49f4bea644f97d88e289da.tar.gz
In msdosfs_inactive(), reclaim the vnodes both for SLOT_DELETED and
SLOT_EMPTY deName[0] values. Besides conforming to FAT specification, it also clears the issue where vfs_hash_insert found the vnode in hash, and newly allocated vnode is vput()ed. There, deName[0] == 0, and vnode is not reclaimed, indefinitely kept on mountlist. Tested by: pho MFC after: 3 weeks
Diffstat (limited to 'sys/fs/msdosfs')
-rw-r--r--sys/fs/msdosfs/msdosfs_denode.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c
index 0399a59..ed24d49 100644
--- a/sys/fs/msdosfs/msdosfs_denode.c
+++ b/sys/fs/msdosfs/msdosfs_denode.c
@@ -593,7 +593,7 @@ msdosfs_inactive(ap)
/*
* Ignore denodes related to stale file handles.
*/
- if (dep->de_Name[0] == SLOT_DELETED)
+ if (dep->de_Name[0] == SLOT_DELETED || dep->de_Name[0] == SLOT_EMPTY)
goto out;
/*
@@ -621,7 +621,7 @@ out:
printf("msdosfs_inactive(): v_usecount %d, de_Name[0] %x\n",
vrefcnt(vp), dep->de_Name[0]);
#endif
- if (dep->de_Name[0] == SLOT_DELETED)
+ if (dep->de_Name[0] == SLOT_DELETED || dep->de_Name[0] == SLOT_EMPTY)
vrecycle(vp, td);
return (error);
}
OpenPOWER on IntegriCloud