SCCS-vsn: sys/nfs/nfs_vnops.c 7.55
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)nfs_vnops.c 7.54 (Berkeley) %G%
+ * @(#)nfs_vnops.c 7.55 (Berkeley) %G%
} else if (ndp->ni_isdotdot) {
nfs_unlock(vp);
error = vget(vdp);
} else if (ndp->ni_isdotdot) {
nfs_unlock(vp);
error = vget(vdp);
+ if (!error && lockparent && *ndp->ni_next == '\0')
+ nfs_lock(vp);
} else {
error = vget(vdp);
} else {
error = vget(vdp);
+ if (!lockparent || error || *ndp->ni_next != '\0')
+ nfs_unlock(vp);
}
if (!error) {
if (vpid == vdp->v_id) {
}
if (!error) {
if (vpid == vdp->v_id) {
vattr.va_ctime.tv_sec == VTONFS(vdp)->n_ctime) {
nfsstats.lookupcache_hits++;
return (0);
vattr.va_ctime.tv_sec == VTONFS(vdp)->n_ctime) {
nfsstats.lookupcache_hits++;
return (0);
- } else {
- cache_purge(vdp);
- nfs_nput(vdp);
- } else {
- nfs_nput(vdp);
+ nfs_nput(vdp);
+ if (lockparent && vdp != vp && *ndp->ni_next == '\0')
+ nfs_unlock(vp);
}
ndp->ni_vp = NULLVP;
} else
}
ndp->ni_vp = NULLVP;
} else