diff options
author | jeff <jeff@FreeBSD.org> | 2005-03-28 09:34:36 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2005-03-28 09:34:36 +0000 |
commit | b136fd4eeec08b4463f68e065e6aa2a33f14b660 (patch) | |
tree | 3389742b8c4fd07ec495c3a6df23823b2153cd70 /sys/fs/devfs | |
parent | 0afa18e58f0050e8bf00de7ba60dd9a366b273b5 (diff) | |
download | FreeBSD-src-b136fd4eeec08b4463f68e065e6aa2a33f14b660.zip FreeBSD-src-b136fd4eeec08b4463f68e065e6aa2a33f14b660.tar.gz |
- We no longer have to bother with PDIRUNLOCK, lookup() handles it for us.
Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/fs/devfs')
-rw-r--r-- | sys/fs/devfs/devfs_vnops.c | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c index 0fa8e30..c28dfa0 100644 --- a/sys/fs/devfs/devfs_vnops.c +++ b/sys/fs/devfs/devfs_vnops.c @@ -587,9 +587,7 @@ devfs_lookupx(ap) nameiop = cnp->cn_nameiop; dmp = VFSTODEVFS(dvp->v_mount); dd = dvp->v_data; - *vpp = NULLVP; - cnp->cn_flags &= ~PDIRUNLOCK; if ((flags & ISLASTCN) && nameiop == RENAME) return (EOPNOTSUPP); @@ -616,15 +614,12 @@ devfs_lookupx(ap) if ((flags & ISLASTCN) && nameiop != LOOKUP) return (EINVAL); VOP_UNLOCK(dvp, 0, td); - cnp->cn_flags |= PDIRUNLOCK; de = TAILQ_FIRST(&dd->de_dlist); /* "." */ de = TAILQ_NEXT(de, de_list); /* ".." */ de = de->de_dir; error = devfs_allocv(de, dvp->v_mount, vpp, td); - if (error || ((flags & LOCKPARENT) && (flags & ISLASTCN))) { + if (error) vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, td); - cnp->cn_flags &= ~PDIRUNLOCK; - } return (error); } @@ -675,10 +670,6 @@ notfound: if ((nameiop == CREATE || nameiop == RENAME) && (flags & (LOCKPARENT | WANTPARENT)) && (flags & ISLASTCN)) { cnp->cn_flags |= SAVENAME; - if (!(flags & LOCKPARENT)) { - VOP_UNLOCK(dvp, 0, td); - cnp->cn_flags |= PDIRUNLOCK; - } return (EJUSTRETURN); } return (ENOENT); @@ -698,20 +689,10 @@ found: error = devfs_allocv(de, dvp->v_mount, vpp, td); if (error) return (error); - if (!(flags & LOCKPARENT)) { - VOP_UNLOCK(dvp, 0, td); - cnp->cn_flags |= PDIRUNLOCK; - } return (0); } error = devfs_allocv(de, dvp->v_mount, vpp, td); - if (error) - return (error); - if (!(flags & LOCKPARENT) || !(flags & ISLASTCN)) { - VOP_UNLOCK(dvp, 0, td); - cnp->cn_flags |= PDIRUNLOCK; - } - return (0); + return (error); } static int |