summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-02-01 00:25:26 +0000
committerjeff <jeff@FreeBSD.org>2006-02-01 00:25:26 +0000
commit30a231055bbecc02f17f1f4fe10c32564b6bcb22 (patch)
tree7bf7224bada967b7ee62d1c1257eab0efb97b47e /sys/ufs
parent34e5ca5b0218833663b71e333221ff426ec2e440 (diff)
downloadFreeBSD-src-30a231055bbecc02f17f1f4fe10c32564b6bcb22.zip
FreeBSD-src-30a231055bbecc02f17f1f4fe10c32564b6bcb22.tar.gz
- Reorder calls to vrele() after calls to vput() when the vrele is a
directory. vrele() may lock the passed vnode, which in these cases would give an invalid lock order of child -> parent. These situations are deadlock prone although do not typically deadlock because the vrele is typically not releasing the last reference to the vnode. Users of vrele must consider it as a call to vn_lock() and order it appropriately. MFC After: 1 week Sponsored by: Isilon Systems, Inc. Tested by: kkenn
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ufs/ufs_extattr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/ufs/ufs/ufs_extattr.c b/sys/ufs/ufs/ufs_extattr.c
index 6f6de78..e6153f3 100644
--- a/sys/ufs/ufs/ufs_extattr.c
+++ b/sys/ufs/ufs/ufs_extattr.c
@@ -469,8 +469,8 @@ ufs_extattr_autostart(struct mount *mp, struct thread *td)
}
if (rvp == attr_dvp) {
/* Should never happen. */
- vrele(attr_dvp);
vput(rvp);
+ vrele(attr_dvp);
return (EINVAL);
}
vrele(rvp);
OpenPOWER on IntegriCloud