Re: [Patch v2] mm: thp: grab the lock before manipulation defer list
From: David Rientjes <rientjes@google.com>
Date: 2020-01-14 20:57:27
Also in:
linux-mm, lkml
From: David Rientjes <rientjes@google.com>
Date: 2020-01-14 20:57:27
Also in:
linux-mm, lkml
On Tue, 14 Jan 2020, Kirill A. Shutemov wrote:
split_huge_page_to_list() has page lock taken. free_transhuge_page() is in the free path and doesn't susceptible to the race. deferred_split_scan() is trickier. list_move() should be safe against list_empty() as it will not produce false-positive list_empty(). list_del_init() *should* (correct me if I'm wrong) be safe because the page is freeing and memcg will not touch the page anymore. deferred_split_huge_page() is a problematic one. It called from page_remove_rmap() path witch does require page lock. I don't see any obvious way to exclude race with mem_cgroup_move_account() here. Anybody else? Wei, could you rewrite the commit message with deferred_split_huge_page() as a race source instead of split_huge_page_to_list()?
I think describing the race in terms of deferred_split_huge_page() makes the most sense and I'd prefer a cc to stable for 5.4+. Even getting the split_queue_len, which is unsigned long, to underflow because of a list_empty(page_deferred_list()) check that is no longer accurate after the lock is taken would be a significant issue for shrinkers.