Do not leak empty swblk.
In swp_pager_meta_build(), if the requested operation results in freeing the last swap pointer in the swblk, free the trie node. Other swap pager code does not expect to find completely empty swblk. Reviewed by: alc, markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
dcc124b5eb
commit
6fc3cacfc6
@ -1824,6 +1824,21 @@ allocated:
|
||||
swp_pager_freeswapspace(sb->d[modpi], 1);
|
||||
/* Enter block into metadata. */
|
||||
sb->d[modpi] = swapblk;
|
||||
|
||||
/*
|
||||
* Free the swblk if we end up with the empty page run.
|
||||
*/
|
||||
if (swapblk == SWAPBLK_NONE) {
|
||||
for (i = 0; i < SWAP_META_PAGES; i++) {
|
||||
if (sb->d[i] != SWAPBLK_NONE)
|
||||
break;
|
||||
}
|
||||
if (i == SWAP_META_PAGES) {
|
||||
SWAP_PCTRIE_REMOVE(&object->un_pager.swp.swp_blks,
|
||||
rdpi);
|
||||
uma_zfree(swblk_zone, sb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user