summaryrefslogtreecommitdiffstats
path: root/sys/gnu
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-04-13 10:59:09 +0000
committerjeff <jeff@FreeBSD.org>2005-04-13 10:59:09 +0000
commitafab3762a03836a33f6a8bd19afdb3d9559e12ec (patch)
treed93f4bc84645fcd224218d7e1c19b2f6b18a4c6c /sys/gnu
parent5642885b84d3a8dfdbf202dfbab02e5c4a93576f (diff)
downloadFreeBSD-src-afab3762a03836a33f6a8bd19afdb3d9559e12ec.zip
FreeBSD-src-afab3762a03836a33f6a8bd19afdb3d9559e12ec.tar.gz
- Change all filesystems and vfs_cache to relock the dvp once the child is
locked in the ISDOTDOT case. Se vfs_lookup.c r1.79 for details. Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/gnu')
-rw-r--r--sys/gnu/ext2fs/ext2_lookup.c7
-rw-r--r--sys/gnu/fs/ext2fs/ext2_lookup.c7
2 files changed, 6 insertions, 8 deletions
diff --git a/sys/gnu/ext2fs/ext2_lookup.c b/sys/gnu/ext2fs/ext2_lookup.c
index 2b3481a..0179f97 100644
--- a/sys/gnu/ext2fs/ext2_lookup.c
+++ b/sys/gnu/ext2fs/ext2_lookup.c
@@ -656,11 +656,10 @@ found:
pdp = vdp;
if (flags & ISDOTDOT) {
VOP_UNLOCK(pdp, 0, td); /* race to get the inode */
- if ((error = VFS_VGET(vdp->v_mount, dp->i_ino, LK_EXCLUSIVE,
- &tdp)) != 0) {
- vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td);
+ error = VFS_VGET(vdp->v_mount, dp->i_ino, LK_EXCLUSIVE, &tdp);
+ vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td);
+ if (error != 0)
return (error);
- }
*vpp = tdp;
} else if (dp->i_number == dp->i_ino) {
VREF(vdp); /* we want ourself, ie "." */
diff --git a/sys/gnu/fs/ext2fs/ext2_lookup.c b/sys/gnu/fs/ext2fs/ext2_lookup.c
index 2b3481a..0179f97 100644
--- a/sys/gnu/fs/ext2fs/ext2_lookup.c
+++ b/sys/gnu/fs/ext2fs/ext2_lookup.c
@@ -656,11 +656,10 @@ found:
pdp = vdp;
if (flags & ISDOTDOT) {
VOP_UNLOCK(pdp, 0, td); /* race to get the inode */
- if ((error = VFS_VGET(vdp->v_mount, dp->i_ino, LK_EXCLUSIVE,
- &tdp)) != 0) {
- vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td);
+ error = VFS_VGET(vdp->v_mount, dp->i_ino, LK_EXCLUSIVE, &tdp);
+ vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td);
+ if (error != 0)
return (error);
- }
*vpp = tdp;
} else if (dp->i_number == dp->i_ino) {
VREF(vdp); /* we want ourself, ie "." */
OpenPOWER on IntegriCloud