On Mon, Feb 25, 2019 at 10:41 PM Nikolaus Rath <Nikolaus@xxxxxxxx> wrote: > > On Feb 12 2019, Nikolaus Rath <Nikolaus@xxxxxxxx> wrote: > > On Feb 12 2019, Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > >> On Sun, Feb 10, 2019 at 11:05 PM Nikolaus Rath <Nikolaus@xxxxxxxx> wrote: > >> > >>> Bad news. I can now reliably reproduce the issue again. > >> > >> A reliable reproducer is always good news. Are the messages exactly > >> the same as last time (value of flags, etc)? > > > > The flags, count, mapcount and mapping values are always the same. The > > page and index is varying. So the general format is: > > > > [ 2562.773181] fuse: trying to steal weird page > > [ 2562.773187] page=<something> index=<something> > > flags=17ffffc00000ad, count=1, mapcount=0, mapping= (null) > > Is there anything else I can do to help debugging this? Could you please try the attached patch? Thanks, Miklos
diff --git a/fs/splice.c b/fs/splice.c index de2ede048473..07c5c77abc45 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -73,7 +73,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, * If we succeeded in removing the mapping, set LRU flag * and return good. */ - if (remove_mapping(mapping, page)) { + if (remove_mapping(mapping, page) && page_count(page) == 1) { buf->flags |= PIPE_BUF_FLAG_LRU; return 0; }