svn commit: r306818 - stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Andriy Gapon
avg at FreeBSD.org
Fri Oct 7 18:56:21 UTC 2016
Author: avg
Date: Fri Oct 7 18:56:20 2016
New Revision: 306818
URL: https://svnweb.freebsd.org/changeset/base/306818
Log:
MFC r306292: fix vnode lock assertion for extended attributes directory
Modified:
stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Fri Oct 7 18:53:28 2016 (r306817)
+++ stable/11/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Fri Oct 7 18:56:20 2016 (r306818)
@@ -3197,6 +3197,11 @@ zfs_setattr(vnode_t *vp, vattr_t *vap, i
if (err == 0 && xattr_obj) {
err = zfs_zget(zp->z_zfsvfs, xattr_obj, &attrzp);
+ if (err == 0) {
+ err = vn_lock(ZTOV(attrzp), LK_EXCLUSIVE);
+ if (err != 0)
+ vrele(ZTOV(attrzp));
+ }
if (err)
goto out2;
}
@@ -3206,7 +3211,7 @@ zfs_setattr(vnode_t *vp, vattr_t *vap, i
if (new_uid != zp->z_uid &&
zfs_fuid_overquota(zfsvfs, B_FALSE, new_uid)) {
if (attrzp)
- vrele(ZTOV(attrzp));
+ vput(ZTOV(attrzp));
err = SET_ERROR(EDQUOT);
goto out2;
}
@@ -3218,7 +3223,7 @@ zfs_setattr(vnode_t *vp, vattr_t *vap, i
if (new_gid != zp->z_gid &&
zfs_fuid_overquota(zfsvfs, B_TRUE, new_gid)) {
if (attrzp)
- vrele(ZTOV(attrzp));
+ vput(ZTOV(attrzp));
err = SET_ERROR(EDQUOT);
goto out2;
}
@@ -3449,7 +3454,7 @@ out:
}
if (attrzp)
- vrele(ZTOV(attrzp));
+ vput(ZTOV(attrzp));
if (aclp)
zfs_acl_free(aclp);
More information about the svn-src-stable
mailing list