summaryrefslogtreecommitdiffstats
path: root/sys/nfsclient
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-04-10 10:22:44 +0000
committerkib <kib@FreeBSD.org>2009-04-10 10:22:44 +0000
commita5ecda6fd6358d3ff6a18998f98482335fb6c884 (patch)
tree1d4aba80f8d00165dcc019427b677a38db46a9e7 /sys/nfsclient
parent81638d98846e99a6bfcf7398057a650533aa1390 (diff)
downloadFreeBSD-src-a5ecda6fd6358d3ff6a18998f98482335fb6c884.zip
FreeBSD-src-a5ecda6fd6358d3ff6a18998f98482335fb6c884.tar.gz
Cache_lookup() for DOTDOT drops dvp vnode lock, allowing dvp to be reclaimed.
Check the condition and return ENOENT then. In nfs_lookup(), respect ENOENT return from cache_lookup() when it is caused by dvp reclaim. Reported and tested by: pho
Diffstat (limited to 'sys/nfsclient')
-rw-r--r--sys/nfsclient/nfs_vnops.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index d201258..b363429 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -978,6 +978,8 @@ nfs_lookup(struct vop_lookup_args *ap)
vrele(newvp);
*vpp = NULLVP;
} else if (error == ENOENT) {
+ if (dvp->v_iflag & VI_DOOMED)
+ return (ENOENT);
/*
* We only accept a negative hit in the cache if the
* modification time of the parent directory matches
OpenPOWER on IntegriCloud