On Thu, Jul 28, 2022 at 11:55:10AM +0200, Alexander Gordeev wrote: > On Wed, Jun 22, 2022 at 05:15:17AM +0100, Al Viro wrote: > > Equivalent of single-segment iovec. Initialized by iov_iter_ubuf(), > > checked for by iter_is_ubuf(), otherwise behaves like ITER_IOVEC > > ones. > > > > We are going to expose the things like ->write_iter() et.al. to those > > in subsequent commits. > > > > New predicate (user_backed_iter()) that is true for ITER_IOVEC and > > ITER_UBUF; places like direct-IO handling should use that for > > checking that pages we modify after getting them from iov_iter_get_pages() > > would need to be dirtied. > > > > DO NOT assume that replacing iter_is_iovec() with user_backed_iter() > > will solve all problems - there's code that uses iter_is_iovec() to > > decide how to poke around in iov_iter guts and for that the predicate > > replacement obviously won't suffice. > > > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > > Link: https://lore.kernel.org/r/20220622041552.737754-9-viro@xxxxxxxxxxxxxxxxxx > > Hi Al, > > This changes causes sendfile09 LTP testcase fail in linux-next > (up to next-20220727) on s390. In fact, not this change exactly, > but rather 92d4d18eecb9 ("new iov_iter flavour - ITER_UBUF") - > which differs from what is posted here. > > AFAICT page_cache_pipe_buf_confirm() encounters !PageUptodate() > and !page->mapping page and returns -ENODATA. > > I am going to narrow the testcase and get more details, but please > let me know if I am missing something. Grrr.... - } else if (iter_is_iovec(to)) { + } else if (!user_backed_iter(to)) { in mm/shmem.c. Spot the typo... Could you check if replacing that line with } else if (user_backed_iter(to)) { fixes the breakage?