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