From owner-svn-src-user@FreeBSD.ORG Sun Jun 30 13:41:22 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id F31CD39F; Sun, 30 Jun 2013 13:41:21 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id E58971EE2; Sun, 30 Jun 2013 13:41:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5UDfLDT002378; Sun, 30 Jun 2013 13:41:21 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r5UDfLM1002377; Sun, 30 Jun 2013 13:41:21 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201306301341.r5UDfLM1002377@svn.freebsd.org> From: Attilio Rao Date: Sun, 30 Jun 2013 13:41:21 +0000 (UTC) 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 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Jun 2013 13:41:22 -0000 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; }