diff options
author | kris <kris@FreeBSD.org> | 2006-02-28 00:05:44 +0000 |
---|---|---|
committer | kris <kris@FreeBSD.org> | 2006-02-28 00:05:44 +0000 |
commit | f1759f2396baad2564a4025e3f1751e02cf8fab1 (patch) | |
tree | 6c8f7d00219b6ac92321f5859907777e2c7ba3b7 /sys/fs/fdescfs | |
parent | ce247bd7742e102956de1e6effb70edb80f9ec31 (diff) | |
download | FreeBSD-src-f1759f2396baad2564a4025e3f1751e02cf8fab1.zip FreeBSD-src-f1759f2396baad2564a4025e3f1751e02cf8fab1.tar.gz |
Correct the vnode locking in fdescfs.
PR: kern/93905
Submitted by: Kostik Belousov <kostikbel@gmail.com>
Reviewed by: jeff
MFC After: 1 week
Diffstat (limited to 'sys/fs/fdescfs')
-rw-r--r-- | sys/fs/fdescfs/fdesc_vnops.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/fs/fdescfs/fdesc_vnops.c b/sys/fs/fdescfs/fdesc_vnops.c index 7b2dd53..61dd48e 100644 --- a/sys/fs/fdescfs/fdesc_vnops.c +++ b/sys/fs/fdescfs/fdesc_vnops.c @@ -193,11 +193,9 @@ fdesc_lookup(ap) goto bad; } - VOP_UNLOCK(dvp, 0, td); if (cnp->cn_namelen == 1 && *pname == '.') { *vpp = dvp; VREF(dvp); - vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, td); return (0); } @@ -228,12 +226,12 @@ fdesc_lookup(ap) if (error) goto bad; VTOFDESC(fvp)->fd_fd = fd; - vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY, td); + if (fvp != dvp) + vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY, td); *vpp = fvp; return (0); bad: - vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY, td); *vpp = NULL; return (error); } |