From 6235163e93a32a59c2238b308424707eaff2a738 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Wed, 20 Feb 2013 21:10:10 -0800 Subject: [PATCH] kernel - add yields in the swap pager freeing path * Add yields in swp_pager_meta_free*(). This routine can loop heavily on very large VM objects and we don't want it to stall the cpu. --- sys/vm/swap_pager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index a5a6f10d06..3d7e9b42eb 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -2224,7 +2224,10 @@ swp_pager_meta_free_callback(struct swblock *swap, void *data) } ++index; } + /* swap may be invalid here due to zfree above */ + lwkt_yield(); + return(0); } @@ -2261,6 +2264,7 @@ swp_pager_meta_free_all(vm_object_t object) panic("swap_pager_meta_free_all: swb_count != 0"); zfree(swap_zone, swap); --object->swblock_count; + lwkt_yield(); } KKASSERT(object->swblock_count == 0); } -- 2.41.0