Author: mm
Date: Sat Jun 12 11:22:45 2010
New Revision: 209097
URL: http://svn.freebsd.org/changeset/base/209097

Log:
  Fix ZFS panic deadlock: cycle in blocking chain via zfs_zget
  
  OpenSolaris onnv-revision:    9774:0bb234ab2287
  
  Obtained from:        OpenSolaris (Bug ID 6788152)
  Approved by:  pjd, delphij (mentor)
  MFC after:    3 days

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sat Jun 
12 11:21:37 2010        (r209096)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sat Jun 
12 11:22:45 2010        (r209097)
@@ -2344,8 +2344,6 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
        ZFS_VERIFY_ZP(zp);
        pzp = zp->z_phys;
 
-       mutex_enter(&zp->z_lock);
-
        /*
         * If ACL is trivial don't bother looking for ACE_READ_ATTRIBUTES.
         * Also, if we are the owner don't bother, since owner should
@@ -2355,7 +2353,6 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
            (pzp->zp_uid != crgetuid(cr))) {
                if (error = zfs_zaccess(zp, ACE_READ_ATTRIBUTES, 0,
                    skipaclchk, cr)) {
-                       mutex_exit(&zp->z_lock);
                        ZFS_EXIT(zfsvfs);
                        return (error);
                }
@@ -2366,6 +2363,7 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, i
         * than to determine whether we were asked the question.
         */
 
+       mutex_enter(&zp->z_lock);
        vap->va_type = IFTOVT(pzp->zp_mode);
        vap->va_mode = pzp->zp_mode & ~S_IFMT;
        zfs_fuid_map_ids(zp, cr, &vap->va_uid, &vap->va_gid);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to