Index: sys/vm/swap_pager.c =================================================================== --- sys/vm/swap_pager.c +++ sys/vm/swap_pager.c @@ -568,7 +568,6 @@ static void swblk_iter_init_only(struct pctrie_iter *blks, vm_object_t object) { - VM_OBJECT_ASSERT_LOCKED(object); MPASS((object->flags & OBJ_SWAP) != 0); pctrie_iter_init(blks, &object->un_pager.swp.swp_blks); } @@ -578,6 +577,7 @@ swblk_iter_init(struct pctrie_iter *blks, vm_object_t object, vm_pindex_t pindex) { + VM_OBJECT_ASSERT_LOCKED(object); swblk_iter_init_only(blks, object); return (swblk_iter_lookup_ge(blks, pindex)); } @@ -1117,8 +1117,8 @@ int n; swp_pager_init_freerange(&range); - VM_OBJECT_WLOCK(object); swblk_iter_init_only(&blks, object); + VM_OBJECT_WLOCK(object); for (i = 0; i < size; i += n) { n = MIN(size - i, INT_MAX); blk = swp_pager_getswapspace(&n); @@ -1264,6 +1264,7 @@ { struct pctrie_iter blks; + VM_OBJECT_ASSERT_LOCKED(object); swblk_iter_init_only(&blks, object); return (swp_pager_haspage_iter(&blks, pindex, before, after)); } @@ -1531,8 +1532,8 @@ { struct pctrie_iter blks; - VM_OBJECT_WLOCK(object); swblk_iter_init_only(&blks, object); + VM_OBJECT_WLOCK(object); return (swap_pager_getpages_locked(&blks, object, ma, count, rbehind, rahead)); } @@ -1636,8 +1637,8 @@ rtvals[i + j] = VM_PAGER_FAIL; continue; } - VM_OBJECT_WLOCK(object); swblk_iter_init_only(&blks, object); + VM_OBJECT_WLOCK(object); for (j = 0; j < n; ++j) { mreq = ma[i + j]; vm_page_aflag_clear(mreq, PGA_SWAP_FREE); @@ -2214,8 +2215,8 @@ pause("swzonxb", 10); } else uma_zwait(swblk_zone); - VM_OBJECT_WLOCK(object); sb = swblk_iter_reinit(blks, object, pindex); + VM_OBJECT_WLOCK(object); if (sb != NULL) /* * Somebody swapped out a nearby page, @@ -2246,8 +2247,8 @@ pause("swzonxp", 10); } else uma_zwait(swpctrie_zone); - VM_OBJECT_WLOCK(object); sb1 = swblk_iter_reinit(blks, object, pindex); + VM_OBJECT_WLOCK(object); if (sb1 != NULL) { uma_zfree(swblk_zone, sb); sb = sb1;