From e3ed82bcf7e48c1d3f88f3cbbcf6bd104957a871 Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Mon, 22 Dec 2014 09:02:21 +0000 Subject: [PATCH] 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. --- sys/vm/vm_page.c | 4 ++++ sys/vm/vm_page.h | 1 + 2 files changed, 5 insertions(+) diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 0ff789f80b4..79665ba9aab 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -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); diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h index 8aa145f82a9..cd3077232f9 100644 --- a/sys/vm/vm_page.h +++ b/sys/vm/vm_page.h @@ -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)