linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Dave Jones <davej@codemonkey.org.uk>,
	"Darrick J. Wong" <darrick.wong@oracle.com>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	linux-xfs@vger.kernel.org
Subject: Re: iov_iter_pipe warning.
Date: Mon, 11 Sep 2017 16:44:40 +1000	[thread overview]
Message-ID: <20170911064440.GP17782@dastard> (raw)
In-Reply-To: <20170911033222.GI5426@ZenIV.linux.org.uk>

On Mon, Sep 11, 2017 at 04:32:22AM +0100, Al Viro wrote:
> On Mon, Sep 11, 2017 at 10:31:13AM +1000, Dave Chinner wrote:
> 
> > splice does not go down the direct IO path, so iomap_dio_actor()
> > should never be handled a pipe as the destination for the IO data.
> > Indeed, splice read has to supply the pages to be put into the pipe,
> > which the DIO path does not do - it requires pages be supplied to
> > it. So I'm not sure why we'd care about pipe destination limitations
> > in the DIO path?
> 
> splice doesn't give a rat's arse for direct IO; it's up to filesystem.

[....]

It's news to me that splice works on direct IO - I thought it was
still required page cache based IO for file data for this stuff to
work. I must have missed the memo saying that splice interfaces now
work on O_DIRECT fds, there's certainly no documentation or comments
in the code I could have read to find this out myself...

As it is, we have very little test coverage for splice interfaces,
and all that I am aware of assumes that sendfile/splice only works
for buffered IO. So I'm not surprised there are bugs in this code,
it's likely to be completely untested.

I'm guessing the warnings are being thrown because sendfile's
source and/or destination is opened O_DIRECT and something else has
also mmap()d the same files and is doing concurrent sendfile/splice
and page faults. Hell, it could even be sendfile to/from the same
file mixing buffered and direct IO, or perhaps vmsplice of a mapped
range of the same file it's using as the O_DIRECT destination fd.
None of which are sane things to do and fall under the "not
supported" category....

> iov_iter_get_pages() for pipe-backed destination does page allocation
> and inserts freshly allocated pages into pipe.

Oh, it's hidden more layers down than the code implied I needed to
look.

i.e. there's no obvious clue in the function names that there is
allocation happening in these paths (get_pipe_pages ->
__get_pipe_pages -> push_pipe -> page allocation). The function
names imply it's getting a reference to pages (like
(get_user_pages()) and the fact it does allocation is inconsistent
with it's naming.  Worse, when push_pipe() fails to allocate pages,
the error __get_pipe_pages() returns is -EFAULT, which further hides
the fact push_pipe() does memory allocation that can fail....

And then there's the companion interface that implies page
allocation: pipe_get_pages_alloc(). Which brings me back to there
being no obvious clue while reading the code from the top down that
pages are being allocated in push_pipe()....

Comments and documentation for this code would help, but I can't
find any of that, either. Hence I assumed naming followed familiar
patterns and so mistook these interfaces being one that does page
allocation and the other for getting references to pre-existing
pages.....

[snip]

> Normally a filesystem doesn't need to care about splice at all -
> just use generic_file_splice_read() and be done with that.
> It will use the normal ->read_iter(), with whatever locking, etc.,
> your filesystem would do on a normal read.

Yup, that's my point - this is exactly what XFS does, and so I had
no clue that the generic splice code had been changed to accept and
use O_DIRECT semantics because no filesystem code was changed to
enable it.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

  reply	other threads:[~2017-09-11  6:44 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-21 20:59 iov_iter_pipe warning Dave Jones
2017-04-05 22:02 ` Dave Jones
2017-04-10 19:28 ` Al Viro
2017-04-10 19:42   ` Dave Jones
2017-04-10 19:57     ` Al Viro
2017-04-10 23:48       ` Dave Jones
2017-04-11  0:22         ` Al Viro
2017-04-11  3:05           ` Dave Jones
2017-04-11  3:28             ` Al Viro
2017-04-11 20:53               ` Dave Jones
2017-04-11 21:12                 ` Al Viro
2017-04-11 22:25                   ` Dave Jones
2017-04-11 23:28                     ` Al Viro
2017-04-11 23:34                       ` Dave Jones
2017-04-11 23:48                         ` Al Viro
2017-04-11 23:45                       ` Dave Jones
2017-04-11 23:51                         ` Al Viro
2017-04-11 23:56                           ` Al Viro
2017-04-12  0:06                             ` Dave Jones
2017-04-12  0:17                               ` Al Viro
2017-04-12  0:58                                 ` Dave Jones
2017-04-12  1:15                                   ` Al Viro
2017-04-12  2:29                                     ` Dave Jones
2017-04-12  2:58                                       ` Al Viro
2017-04-12 14:35                                         ` Dave Jones
2017-04-12 15:26                                           ` Al Viro
2017-04-12 16:27                                             ` Dave Jones
2017-04-12 17:07                                               ` Al Viro
2017-04-12 19:03                                                 ` Dave Jones
2017-04-21 17:54                                                   ` Al Viro
2017-04-27  4:19                                                     ` Dave Jones
2017-04-27 16:34                                                       ` Dave Jones
2017-04-27 17:39                                                         ` Al Viro
2017-04-28 15:29                                                     ` Dave Jones
2017-04-28 16:43                                                       ` Al Viro
2017-04-28 16:50                                                         ` Dave Jones
2017-04-28 17:20                                                           ` Al Viro
2017-04-28 18:25                                                             ` Al Viro
2017-04-29  1:58                                                               ` Dave Jones
2017-04-29  2:47                                                                 ` Al Viro
2017-04-29 15:51                                                                   ` Dave Jones
2017-04-29 20:46                                                                     ` [git pull] vfs.git fix (Re: iov_iter_pipe warning.) Al Viro
2017-08-07 20:18                                                             ` iov_iter_pipe warning Dave Jones
2017-08-28 20:31                                                               ` Dave Jones
2017-08-29  4:25                                                                 ` Darrick J. Wong
2017-08-30 17:05                                                                   ` Dave Jones
2017-08-30 17:13                                                                     ` Darrick J. Wong
2017-08-30 17:17                                                                       ` Dave Jones
2017-09-06 20:03                                                                   ` Dave Jones
2017-09-06 23:46                                                                     ` Dave Chinner
2017-09-07  3:48                                                                       ` Dave Jones
2017-09-07  4:33                                                                         ` Al Viro
2017-09-08  1:04                                                                       ` Al Viro
2017-09-10  1:07                                                                         ` Dave Jones
2017-09-10  2:57                                                                           ` Al Viro
2017-09-10 16:07                                                                             ` Dave Jones
2017-09-10 20:05                                                                               ` Al Viro
2017-09-10 20:07                                                                                 ` Dave Jones
2017-09-10 20:33                                                                                   ` Al Viro
2017-09-10 21:11                                                                             ` Dave Chinner
2017-09-10 21:19                                                                               ` Al Viro
2017-09-10 22:08                                                                                 ` Dave Chinner
2017-09-10 23:07                                                                                   ` Al Viro
2017-09-10 23:15                                                                                     ` Al Viro
2017-09-11  0:31                                                                                     ` Dave Chinner
2017-09-11  3:32                                                                                       ` Al Viro
2017-09-11  6:44                                                                                         ` Dave Chinner [this message]
2017-09-11 20:07                                                                                           ` Al Viro
2017-09-11 20:17                                                                                             ` Al Viro
2017-09-12  6:02                                                                                             ` Dave Chinner
2017-09-12 11:13                                                                                               ` Al Viro
2017-09-11 12:07                                                                                     ` Christoph Hellwig
2017-09-11 12:51                                                                                       ` Al Viro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170911064440.GP17782@dastard \
    --to=david@fromorbit.com \
    --cc=darrick.wong@oracle.com \
    --cc=davej@codemonkey.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).