Author: glebius
Date: Mon Dec 22 09:02:21 2014
New Revision: 276056
URL: https://svnweb.freebsd.org/changeset/base/276056

Log:
  Add flag VM_ALLOC_NOWAIT for vm_page_grab() that prevents sleeping and
  allows the function to fail.
  
  Reviewed by:  kib, alc
  Sponsored by: Nginx, Inc.

Modified:
  head/sys/vm/vm_page.c
  head/sys/vm/vm_page.h

Modified: head/sys/vm/vm_page.c
==============================================================================
--- head/sys/vm/vm_page.c       Mon Dec 22 09:00:47 2014        (r276055)
+++ head/sys/vm/vm_page.c       Mon Dec 22 09:02:21 2014        (r276056)
@@ -2711,6 +2711,8 @@ retrylookup:
                sleep = (allocflags & VM_ALLOC_IGN_SBUSY) != 0 ?
                    vm_page_xbusied(m) : vm_page_busied(m);
                if (sleep) {
+                       if ((allocflags & VM_ALLOC_NOWAIT) != 0)
+                               return (NULL); 
                        /*
                         * Reference the page before unlocking and
                         * sleeping so that the page daemon is less
@@ -2738,6 +2740,8 @@ retrylookup:
        }
        m = vm_page_alloc(object, pindex, allocflags);
        if (m == NULL) {
+               if ((allocflags & VM_ALLOC_NOWAIT) != 0)
+                       return (NULL);
                VM_OBJECT_WUNLOCK(object);
                VM_WAIT;
                VM_OBJECT_WLOCK(object);

Modified: head/sys/vm/vm_page.h
==============================================================================
--- head/sys/vm/vm_page.h       Mon Dec 22 09:00:47 2014        (r276055)
+++ head/sys/vm/vm_page.h       Mon Dec 22 09:02:21 2014        (r276056)
@@ -405,6 +405,7 @@ vm_page_t PHYS_TO_VM_PAGE(vm_paddr_t pa)
 #define        VM_ALLOC_IGN_SBUSY      0x1000  /* (g) Ignore shared busy flag 
*/
 #define        VM_ALLOC_NODUMP         0x2000  /* (ag) don't include in dump */
 #define        VM_ALLOC_SBUSY          0x4000  /* (acg) Shared busy the page */
+#define        VM_ALLOC_NOWAIT         0x8000  /* (g) Do not sleep, return 
NULL */
 #define        VM_ALLOC_COUNT_SHIFT    16
 #define        VM_ALLOC_COUNT(count)   ((count) << VM_ALLOC_COUNT_SHIFT)
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to