svn commit: r252418 - user/attilio/vmobj-readlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Attilio Rao
attilio at FreeBSD.org
Sun Jun 30 13:41:22 UTC 2013
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;
}
More information about the svn-src-user
mailing list