Implement the zs_zpool_shrink() function, which previously just returned EINVAL, by calling the zs_shrink() function to shrink the zs_pool by one zspage. The zs_shrink() function is called in a loop until the requested number of pages have been reclaimed, or an error occurs. Signed-off-by: Dan Streetman <ddstreet@xxxxxxxx> Cc: Minchan Kim <minchan@xxxxxxxxxx> --- mm/zsmalloc.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index f769c21..4937b2b 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -292,7 +292,20 @@ static void zs_zpool_free(void *pool, unsigned long handle) static int zs_zpool_shrink(void *pool, unsigned int pages, unsigned int *reclaimed) { - return -EINVAL; + int total = 0, ret = 0; + + while (total < pages) { + ret = zs_shrink(pool); + WARN_ON(!ret); + if (ret <= 0) + break; + total += ret; + ret = 0; + } + + if (reclaimed) + *reclaimed = total; + return ret; } static void *zs_zpool_map(void *pool, unsigned long handle, -- 1.8.3.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>