Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Jun 2013 13:41:21 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r252418 - user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201306301341.r5UDfLM1002377@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: attilio
Date: Sun Jun 30 13:41:21 2013
New Revision: 252418
URL: http://svnweb.freebsd.org/changeset/base/252418

Log:
  Fix a mismerge of ZFS:
  page_busy() could lead to deadlocks when non valid pages were
  returned.
  
  Sponsored by:	EMC / Isilon storage division
  Reported by:	bapt

Modified:
  user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c

Modified: user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Sun Jun 30 13:32:02 2013	(r252417)
+++ user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Sun Jun 30 13:41:21 2013	(r252418)
@@ -350,12 +350,9 @@ page_busy(vnode_t *vp, int64_t start, in
 				continue;
 			}
 			vm_page_busy_rlock(pp);
-		} else if (!alloc) {
-			pp = NULL;
-			break;
-		}
-		if (pp == NULL) {
-			ASSERT(alloc);
+		} else if (pp == NULL) {
+			if (!alloc)
+				break;
 			pp = vm_page_alloc(obj, OFF_TO_IDX(start),
 			    VM_ALLOC_SYSTEM | VM_ALLOC_IFCACHED |
 			    VM_ALLOC_RBUSY);
@@ -366,11 +363,11 @@ page_busy(vnode_t *vp, int64_t start, in
 
 		if (pp != NULL) {
 			ASSERT3U(pp->valid, ==, VM_PAGE_BITS_ALL);
-			if (alloc) {
-				vm_object_pip_add(obj, 1);
-				pmap_remove_write(pp);
-				vm_page_clear_dirty(pp, off, nbytes);
-			}
+			if (!alloc)
+				break;
+			vm_object_pip_add(obj, 1);
+			pmap_remove_write(pp);
+			vm_page_clear_dirty(pp, off, nbytes);
 		}
 		break;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306301341.r5UDfLM1002377>