diff options
author | jeff <jeff@FreeBSD.org> | 2006-02-01 00:25:26 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2006-02-01 00:25:26 +0000 |
commit | 30a231055bbecc02f17f1f4fe10c32564b6bcb22 (patch) | |
tree | 7bf7224bada967b7ee62d1c1257eab0efb97b47e /sys/ufs | |
parent | 34e5ca5b0218833663b71e333221ff426ec2e440 (diff) | |
download | FreeBSD-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.c | 2 |
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); |