VM uses nr_swap_pages as one of information when it reclaims anonymous page because nr_swap_pages means how many freeable space in swap so VM is able to throttle swap out if it found there is no more space in swap.
But for zram-swap, there is size gap between virtual disksize and physical memory to be able to store compressed memory so nr_swap_pages is not correct parameter to throttle swap. It causes endless anonymous reclaim(ie, swapout) even if there is no free space in zram-swap so it makes system unresponsive. This patch adds new hint SWAP_GET_FREE so zram can return how many of freeable space to VM. With using that, VM can know whether zram is full and substract remained freeable space from nr_swap_pages to make it less than 0. IOW, from now on, VM sees there is no more space of zram so that it will stop anonymous reclaiming until swap_entry_free free a page which increases nr_swap_pages again. With this patch, user will see OOM when zram-swap is full instead of hang with no response. Minchan Kim (3): zram: generalize swap_slot_free_notify mm: add swap_get_free hint for zram zram: add swap_get_free hint Documentation/filesystems/Locking | 7 ++---- drivers/block/zram/zram_drv.c | 36 +++++++++++++++++++++++++-- include/linux/blkdev.h | 8 ++++-- mm/page_io.c | 7 +++--- mm/swapfile.c | 52 +++++++++++++++++++++++++++++++++++---- 5 files changed, 93 insertions(+), 17 deletions(-) -- 2.0.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/