]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit - mm/swapfile.c
mm: add three more cond_resched() in swapoff
authorHugh Dickins <hughd@google.com>
Tue, 13 Dec 2016 00:44:44 +0000 (16:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 13 Dec 2016 02:55:08 +0000 (18:55 -0800)
commitdc644a073769dd8949a75691eb4a5bdeb70a7d51
treeda576c3a8a1e38cbef5f00ce3974f45295832a63
parenta6de734bc002fe2027ccc074fbbd87d72957b7a4
mm: add three more cond_resched() in swapoff

Add a cond_resched() in the unuse_pmd_range() loop (so as to call it
even when pmd none or trans_huge, like zap_pmd_range() does); and in the
unuse_mm() loop (since that might skip over many vmas).  shmem_unuse()
and radix_tree_locate_item() look good enough already.

Those were the obvious places, but in fact the stalls came from
find_next_to_unuse(), which sometimes scans through many unused entries.
Apply scan_swap_map()'s LATENCY_LIMIT of 256 there too; and only go off
to test frontswap_map when a used entry is found.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1612052155140.13021@eggly.anvils
Signed-off-by: Hugh Dickins <hughd@google.com>
Reported-by: Eric Dumazet <edumazet@google.com>
Cc: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/swapfile.c