Author: avg
Date: Fri Oct  7 18:56:24 2016
New Revision: 306819
URL: https://svnweb.freebsd.org/changeset/base/306819

Log:
  MFC r306292: fix vnode lock assertion for extended attributes directory

Modified:
  stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c        
Fri Oct  7 18:56:20 2016        (r306818)
+++ stable/10/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c        
Fri Oct  7 18:56:24 2016        (r306819)
@@ -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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "[email protected]"

Reply via email to