svn commit: r252006 - in user/attilio/vmobj-readlock/sys: kern vm

Attilio Rao attilio at FreeBSD.org
Wed Jun 19 20:37:14 UTC 2013


Author: attilio
Date: Wed Jun 19 20:37:13 2013
New Revision: 252006
URL: http://svnweb.freebsd.org/changeset/base/252006

Log:
  Rename the VM_PAGE_ALLOC_IGN_SBUSY into VM_PAGE_ALLOC_IGN_RBUSY in order
  to express the "read busy" concept (in accordance with r/w object lock).
  
  Sponsored by:	EMC / Isilon storage division

Modified:
  user/attilio/vmobj-readlock/sys/kern/vfs_bio.c
  user/attilio/vmobj-readlock/sys/vm/vm_page.c
  user/attilio/vmobj-readlock/sys/vm/vm_page.h

Modified: user/attilio/vmobj-readlock/sys/kern/vfs_bio.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/kern/vfs_bio.c	Wed Jun 19 20:11:46 2013	(r252005)
+++ user/attilio/vmobj-readlock/sys/kern/vfs_bio.c	Wed Jun 19 20:37:13 2013	(r252006)
@@ -3488,14 +3488,14 @@ allocbuf(struct buf *bp, int size)
 				 * matter which process we are.
 				 *
 				 * We can only test VPO_BUSY here.  Blocking on
-				 * m->busy might lead to a deadlock:
-				 *  vm_fault->getpages->cluster_read->allocbuf
-				 * Thus, we specify VM_ALLOC_IGN_SBUSY.
+				 * m->busy might lead to deadlocks once
+				 * allocbuf() is called after pages are
+				 * vfs_busy_pages().
 				 */
 				m = vm_page_grab(obj, OFF_TO_IDX(bp->b_offset) +
 				    bp->b_npages, VM_ALLOC_NOBUSY |
 				    VM_ALLOC_SYSTEM | VM_ALLOC_WIRED |
-				    VM_ALLOC_RETRY | VM_ALLOC_IGN_SBUSY |
+				    VM_ALLOC_RETRY | VM_ALLOC_IGN_RBUSY |
 				    VM_ALLOC_COUNT(desiredpages - bp->b_npages));
 				if (m->valid == 0)
 					bp->b_flags &= ~B_CACHE;

Modified: user/attilio/vmobj-readlock/sys/vm/vm_page.c
==============================================================================
--- user/attilio/vmobj-readlock/sys/vm/vm_page.c	Wed Jun 19 20:11:46 2013	(r252005)
+++ user/attilio/vmobj-readlock/sys/vm/vm_page.c	Wed Jun 19 20:37:13 2013	(r252006)
@@ -2425,7 +2425,7 @@ vm_page_grab(vm_object_t object, vm_pind
 retrylookup:
 	if ((m = vm_page_lookup(object, pindex)) != NULL) {
 		if ((m->oflags & VPO_BUSY) != 0 ||
-		    ((allocflags & VM_ALLOC_IGN_SBUSY) == 0 && m->busy != 0)) {
+		    ((allocflags & VM_ALLOC_IGN_RBUSY) == 0 && m->busy != 0)) {
 			/*
 			 * Reference the page before unlocking and
 			 * sleeping so that the page daemon is less
@@ -2449,7 +2449,7 @@ retrylookup:
 		}
 	}
 	m = vm_page_alloc(object, pindex, allocflags & ~(VM_ALLOC_RETRY |
-	    VM_ALLOC_IGN_SBUSY));
+	    VM_ALLOC_IGN_RBUSY));
 	if (m == NULL) {
 		VM_OBJECT_WUNLOCK(object);
 		VM_WAIT;

Modified: user/attilio/vmobj-readlock/sys/vm/vm_page.h
==============================================================================
--- user/attilio/vmobj-readlock/sys/vm/vm_page.h	Wed Jun 19 20:11:46 2013	(r252005)
+++ user/attilio/vmobj-readlock/sys/vm/vm_page.h	Wed Jun 19 20:37:13 2013	(r252006)
@@ -346,7 +346,7 @@ vm_page_t PHYS_TO_VM_PAGE(vm_paddr_t pa)
 #define	VM_ALLOC_NOBUSY		0x0200	/* Do not busy the page */
 #define	VM_ALLOC_IFCACHED	0x0400	/* Fail if the page is not cached */
 #define	VM_ALLOC_IFNOTCACHED	0x0800	/* Fail if the page is cached */
-#define	VM_ALLOC_IGN_SBUSY	0x1000	/* vm_page_grab() only */
+#define	VM_ALLOC_IGN_RBUSY	0x1000	/* vm_page_grab() only */
 #define	VM_ALLOC_NODUMP		0x2000	/* don't include in dump */
 
 #define	VM_ALLOC_COUNT_SHIFT	16


More information about the svn-src-user mailing list