Date: Wed, 19 Jun 2013 20:37:13 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r252006 - in user/attilio/vmobj-readlock/sys: kern vm Message-ID: <201306192037.r5JKbDHE065557@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306192037.r5JKbDHE065557>