From: Jim Rees Date: Mon, 7 Jul 2003 18:04:04 +0000 (+0000) Subject: openbsd-vnops-20030707 X-Git-Tag: openafs-devel-1_3_50~126 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=fc60d09e3d6b20ffa3cc25368a3c06f20dd3cd9c openbsd-vnops-20030707 always return child locked in lookup add support for PDIRUNLOCK flag --- diff --git a/src/afs/OBSD/osi_vnodeops.c b/src/afs/OBSD/osi_vnodeops.c index 55556b3..2748bb1 100644 --- a/src/afs/OBSD/osi_vnodeops.c +++ b/src/afs/OBSD/osi_vnodeops.c @@ -246,9 +246,12 @@ struct vop_lookup_args /* { GETNAME(); lockparent = flags & LOCKPARENT; wantparent = flags & (LOCKPARENT|WANTPARENT); +#ifdef PDIRUNLOCK + cnp->cn_flags &= ~PDIRUNLOCK; +#endif if (ap->a_dvp->v_type != VDIR) { - *ap->a_vpp = 0; + *ap->a_vpp = NULL; DROPNAME(); return ENOTDIR; } @@ -265,14 +268,16 @@ struct vop_lookup_args /* { if (cnp->cn_nameiop != LOOKUP && (flags & ISLASTCN)) cnp->cn_flags |= SAVENAME; DROPNAME(); - *ap->a_vpp = 0; + *ap->a_vpp = NULL; return (code); } vp = AFSTOV(vcp); /* always get a node if no error */ - /* The parent directory comes in locked. We unlock it on return - unless the caller wants it left locked. - we also always return the vnode locked. */ + /* + * The parent directory comes in locked. We unlock it on return + * unless the caller wants it left locked. + * we also always return the vnode locked. + */ if (vp == dvp) { /* they're the same; afs_lookup() already ref'ed the leaf. @@ -280,9 +285,13 @@ struct vop_lookup_args /* { if (afs_debug & AFSDEB_VNLAYER) printf("ref'ed %p as .\n", dvp); } else { - if (!lockparent || !(flags & ISLASTCN)) + if (!lockparent || !(flags & ISLASTCN)) { VOP_UNLOCK(dvp, 0, curproc); /* done with parent. */ - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curproc); /* always return the child locked */ +#ifdef PDIRUNLOCK + cnp->cn_flags |= PDIRUNLOCK; +#endif + } + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curproc); /* always return the child locked */ if (afs_debug & AFSDEB_VNLAYER) printf("locked ret %p from lookup\n", vp); }