summaryrefslogtreecommitdiffstats
path: root/sys/fs/devfs
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-03-28 09:34:36 +0000
committerjeff <jeff@FreeBSD.org>2005-03-28 09:34:36 +0000
commitb136fd4eeec08b4463f68e065e6aa2a33f14b660 (patch)
tree3389742b8c4fd07ec495c3a6df23823b2153cd70 /sys/fs/devfs
parent0afa18e58f0050e8bf00de7ba60dd9a366b273b5 (diff)
downloadFreeBSD-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.c23
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
OpenPOWER on IntegriCloud