Index: sys/vm/vm_page.c =================================================================== --- sys/vm/vm_page.c +++ sys/vm/vm_page.c @@ -4756,12 +4756,11 @@ /* * vm_page_grab_sleep * - * Sleep for busy according to VM_ALLOC_ parameters. Returns true - * if the caller should retry and false otherwise. + * Sleep for busy according to VM_ALLOC_ parameters. Returns true if + * allocflags permits waiting and false otherwise. * - * If the object is locked on entry the object will be unlocked with - * false returns and still locked but possibly having been dropped - * with true returns. + * The object may be locked on entry. If so, lock will be released and + * reacquired if the routine sleeps. */ static bool vm_page_grab_sleep(vm_object_t object, vm_page_t m, vm_pindex_t pindex, @@ -4781,8 +4780,6 @@ if (_vm_page_busy_sleep(object, m, pindex, wmesg, allocflags, locked) && locked) VM_OBJECT_WLOCK(object); - if ((allocflags & VM_ALLOC_WAITFAIL) != 0) - return (false); return (true); } @@ -4796,11 +4793,14 @@ KASSERT((allocflags & VM_ALLOC_NOBUSY) == 0 || (allocflags & VM_ALLOC_WIRED) != 0, - ("vm_page_grab*: the pages must be busied or wired")); + ("%s: the pages must be busied or wired", __func__)); KASSERT((allocflags & VM_ALLOC_SBUSY) == 0 || (allocflags & VM_ALLOC_IGN_SBUSY) != 0, - ("vm_page_grab*: VM_ALLOC_SBUSY/VM_ALLOC_IGN_SBUSY mismatch")); + ("%s: VM_ALLOC_SBUSY/VM_ALLOC_IGN_SBUSY mismatch", __func__)); + + KASSERT((allocflags & VM_ALLOC_WAITFAIL) == 0, + ("%s: Invalid waitfail flag", __func__)); } /* @@ -4812,8 +4812,8 @@ int pflags; pflags = allocflags & - ~(VM_ALLOC_NOWAIT | VM_ALLOC_WAITOK | VM_ALLOC_WAITFAIL | - VM_ALLOC_NOBUSY | VM_ALLOC_IGN_SBUSY); + ~(VM_ALLOC_NOWAIT | VM_ALLOC_WAITOK | VM_ALLOC_NOBUSY | + VM_ALLOC_IGN_SBUSY); if ((allocflags & VM_ALLOC_NOWAIT) == 0) pflags |= VM_ALLOC_WAITFAIL; if ((allocflags & VM_ALLOC_IGN_SBUSY) != 0) @@ -4855,7 +4855,7 @@ return (NULL); m = vm_page_alloc(object, pindex, vm_page_grab_pflags(allocflags)); if (m == NULL) { - if ((allocflags & (VM_ALLOC_NOWAIT | VM_ALLOC_WAITFAIL)) != 0) + if ((allocflags & VM_ALLOC_NOWAIT) != 0) return (NULL); goto retrylookup; } @@ -4954,11 +4954,8 @@ vm_page_t ma[VM_INITIAL_PAGEIN]; int after, i, pflags, rv; - KASSERT((allocflags & VM_ALLOC_SBUSY) == 0 || - (allocflags & VM_ALLOC_IGN_SBUSY) != 0, - ("vm_page_grab_valid: VM_ALLOC_SBUSY/VM_ALLOC_IGN_SBUSY mismatch")); - KASSERT((allocflags & - (VM_ALLOC_NOWAIT | VM_ALLOC_WAITFAIL | VM_ALLOC_ZERO)) == 0, + vm_page_grab_check(allocflags); + KASSERT((allocflags & (VM_ALLOC_NOWAIT | VM_ALLOC_ZERO)) == 0, ("vm_page_grab_valid: Invalid flags 0x%X", allocflags)); VM_OBJECT_ASSERT_WLOCKED(object); pflags = allocflags & ~(VM_ALLOC_NOBUSY | VM_ALLOC_SBUSY | @@ -5116,12 +5113,8 @@ int flags; int error; - KASSERT((allocflags & VM_ALLOC_SBUSY) == 0 || - (allocflags & VM_ALLOC_IGN_SBUSY) != 0, - ("vm_page_grab_valid_unlocked: VM_ALLOC_SBUSY/VM_ALLOC_IGN_SBUSY " - "mismatch")); - KASSERT((allocflags & - (VM_ALLOC_NOWAIT | VM_ALLOC_WAITFAIL | VM_ALLOC_ZERO)) == 0, + vm_page_grab_check(allocflags); + KASSERT((allocflags & (VM_ALLOC_NOWAIT | VM_ALLOC_ZERO)) == 0, ("vm_page_grab_valid_unlocked: Invalid flags 0x%X", allocflags)); /* @@ -5218,8 +5211,7 @@ m = vm_page_alloc_after(object, pindex + i, pflags | VM_ALLOC_COUNT(count - i), mpred); if (m == NULL) { - if ((allocflags & (VM_ALLOC_NOWAIT | - VM_ALLOC_WAITFAIL)) != 0) + if ((allocflags & VM_ALLOC_NOWAIT) != 0) break; goto retrylookup; }