diff options
author | kib <kib@FreeBSD.org> | 2010-02-28 17:10:41 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-02-28 17:10:41 +0000 |
commit | 11cf2ecaee883581cf49f4bea644f97d88e289da (patch) | |
tree | 525f25a4ffd309d1b864039ca2b805981cb17090 /sys/fs/msdosfs/msdosfs_denode.c | |
parent | 21f579c3fb6b782ee610255d7f5bbb22e326b66c (diff) | |
download | FreeBSD-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/msdosfs_denode.c')
-rw-r--r-- | sys/fs/msdosfs/msdosfs_denode.c | 4 |
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); } |