diff options
-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); } |