diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -2190,8 +2190,8 @@ * SWP_PAGER_META_TRANSFER() - transfer a range of blocks in the srcobject's * swap metadata into dstobject. * - * This routine will free swap metadata structures as they are cleaned - * out. + * Blocks in src that correspond to holes in dst are transferred. Blocks + * in src that correspond to blocks in dst are freed. */ static void swp_pager_meta_transfer(vm_object_t srcobject, vm_object_t dstobject, @@ -2235,8 +2235,10 @@ */ d[i] = blk; d_mask |= 1 << i; - } else if (blk != SWAPBLK_NONE) + } else if (blk != SWAPBLK_NONE) { + /* Dst has a block at pindex, so free block. */ swp_pager_update_freerange(&range, sb->d[i]); + } sb->d[i] = SWAPBLK_NONE; } if (swp_pager_swblk_empty(sb, 0, start) &&