2021-11-09 22:34 GMT+09:00, Matthew Wilcox <willy@xxxxxxxxxxxxx>: > On Tue, Nov 09, 2021 at 07:45:47PM +0900, Namjae Jeon wrote: >> Hi Matthew, >> >> This patch is hitting BUG_ON trap in read_pages() when running >> xfstests for cifs. >> There seems to be a same issue with other filesystems using .readpages ? > > The real fix, of course, is to migrate away from using ->readpages ;-) > I think both 9p and nfs are going away this cycle. CIFS really needs > to move to using the netfs interfaces. Okay. > >> Could you please take a look ? > > Please try this patch: Work fine. > > While free_unref_page_list() puts pages onto the CPU local LRU list, it > does not remove them from the list they were passed in on. That makes > the list_head appear to be non-empty, and would lead to various corruption > problems if we didn't have an assertion that the list was empty. > > Reinitialise the list after calling free_unref_page_list() to avoid > this problem. > > Fixes: 988c69f1bc23 ("mm: optimise put_pages_list()") > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> Tested-by: Namjae Jeon <linkinjeon@xxxxxxxxxx> Thanks! > > diff --git a/mm/swap.c b/mm/swap.c > index 1841c24682f8..e8c9dc6d0377 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -156,6 +156,7 @@ void put_pages_list(struct list_head *pages) > } > > free_unref_page_list(pages); > + INIT_LIST_HEAD(pages); > } > EXPORT_SYMBOL(put_pages_list); > >