summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_lookup.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2008-12-18 11:58:12 +0000
committerkib <kib@FreeBSD.org>2008-12-18 11:58:12 +0000
commitfe785ac856e74cb4f13d1a522b6c71392542707f (patch)
tree6bd835af5c354ba8631f52c148717192da68b66d /sys/kern/vfs_lookup.c
parentb08c9bbff44148be921e9b0cd73b6d0775b75c13 (diff)
downloadFreeBSD-src-fe785ac856e74cb4f13d1a522b6c71392542707f.zip
FreeBSD-src-fe785ac856e74cb4f13d1a522b6c71392542707f.tar.gz
Do not return success and doomed vnode from lookup. LK_UPGRADE allows
the vnode to be reclaimed. Tested by: pho MFC after: 1 month
Diffstat (limited to 'sys/kern/vfs_lookup.c')
-rw-r--r--sys/kern/vfs_lookup.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 06682d5..c4840ce 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -814,6 +814,10 @@ success:
if ((cnp->cn_flags & (ISLASTCN | LOCKSHARED | LOCKLEAF)) ==
(ISLASTCN | LOCKLEAF) && VOP_ISLOCKED(dp) != LK_EXCLUSIVE) {
vn_lock(dp, LK_UPGRADE | LK_RETRY);
+ if (dp->v_iflag & VI_DOOMED) {
+ error = ENOENT;
+ goto bad2;
+ }
}
if (vfslocked && dvfslocked)
VFS_UNLOCK_GIANT(dvfslocked); /* Only need one */
OpenPOWER on IntegriCloud