diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2015-11-06 05:49:10 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-06 06:34:48 +0300 |
commit | f2e5ff85edea30a59b96cf9e20e8886991b0d097 (patch) | |
tree | 146d53bc0e561945541c95ba77149f8154f1f9a1 /lib/bch.c | |
parent | ad12695f177c3403a64348b42718faf9727fe358 (diff) | |
download | linux-f2e5ff85edea30a59b96cf9e20e8886991b0d097.tar.xz |
ksm: don't fail stable tree lookups if walking over stale stable_nodes
The stable_nodes can become stale at any time if the underlying pages gets
freed. The stable_node gets collected and removed from the stable rbtree
if that is detected during the rbtree lookups.
Don't fail the lookup if running into stale stable_nodes, just restart the
lookup after collecting the stale stable_nodes. Otherwise the CPU spent
in the preparation stage is wasted and the lookup must be repeated at the
next loop potentially failing a second time in a second stale stable_node.
If we don't prune aggressively we delay the merging of the unstable node
candidates and at the same time we delay the freeing of the stale
stable_nodes. Keeping stale stable_nodes around wastes memory and it
can't provide any benefit.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: Petr Holasek <pholasek@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/bch.c')
0 files changed, 0 insertions, 0 deletions