From: Jeff Layton <jlayton@redhat.com>
To: Johannes Thumshirn <jthumshirn@suse.de>,
Alexander Viro <viro@zeniv.linux.org.uk>
Cc: "J . Bruce Fields" <bfields@fieldses.org>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
mbenes@suse.cz, jack@suse.cz
Subject: Re: [PATCH RESEND] splice: introduce FMODE_SPLICE_READ and FMODE_SPLICE_WRITE
Date: Wed, 11 Jan 2017 07:20:13 -0500 [thread overview]
Message-ID: <1484137213.2621.6.camel@redhat.com> (raw)
In-Reply-To: <20170111095139.17783-1-jthumshirn@suse.de>
On Wed, 2017-01-11 at 10:51 +0100, Johannes Thumshirn wrote:
> Introduce FMODE_SPLICE_READ and FMODE_SPLICE_WRITE. These modes check
> whether it is legal to read or write a file using splice. Both get
> automatically set on regular files and are not checked when a 'struct
> fileoperations' includes the splice_{read,write} methods.
>
Could you add a description of the problem that this solves? I assume
you hit a problem trying to splice to/from a non-regular file, but it'd
be good to know what that problem was.
Thanks,
> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
> ---
> fs/open.c | 4 ++++
> fs/splice.c | 6 ++++++
> include/linux/fs.h | 5 +++++
> 3 files changed, 15 insertions(+)
>
> diff --git a/fs/open.c b/fs/open.c
> index 9921f70..b71259c 100644
> --- a/fs/open.c
> +++ b/fs/open.c
> @@ -733,6 +733,10 @@ static int do_dentry_open(struct file *f,
> if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))
> f->f_mode |= FMODE_ATOMIC_POS;
>
> + if (S_ISREG(inode->i_mode))
> + f->f_mode |= FMODE_SPLICE_WRITE | FMODE_SPLICE_READ;
> +
> +
> f->f_op = fops_get(inode->i_fop);
> if (unlikely(WARN_ON(!f->f_op))) {
> error = -ENODEV;
> diff --git a/fs/splice.c b/fs/splice.c
> index 873d831..b0cfcb2 100644
> --- a/fs/splice.c
> +++ b/fs/splice.c
> @@ -397,6 +397,9 @@ static ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
> if (pipe->nrbufs == pipe->buffers)
> return -EAGAIN;
>
> + if (unlikely(!(in->f_mode & FMODE_SPLICE_READ)))
> + return -EINVAL;
> +
> /*
> * Try to keep page boundaries matching to source pagecache ones -
> * it probably won't be much help, but...
> @@ -825,6 +828,9 @@ static ssize_t default_file_splice_write(struct pipe_inode_info *pipe,
> {
> ssize_t ret;
>
> + if (unlikely(!(out->f_mode & FMODE_SPLICE_WRITE)))
> + return -EINVAL;
> +
> ret = splice_from_pipe(pipe, out, ppos, len, flags, write_pipe_buf);
> if (ret > 0)
> *ppos += ret;
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 2ba0743..30477c5 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -143,6 +143,11 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
> /* File was opened by fanotify and shouldn't generate fanotify events */
> #define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
>
> +/* File can be read using splice */
> +#define FMODE_SPLICE_READ ((__force fmode_t)0x8000000)
> +/* File can be written using splice */
> +#define FMODE_SPLICE_WRITE ((__force fmode_t)0x10000000)
> +
> /*
> * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
> * that indicates that they should check the contents of the iovec are
--
Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2017-01-11 12:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-11 9:51 [PATCH RESEND] splice: introduce FMODE_SPLICE_READ and FMODE_SPLICE_WRITE Johannes Thumshirn
2017-01-11 12:20 ` Jeff Layton [this message]
2017-01-11 13:00 ` Johannes Thumshirn
2017-01-11 13:00 ` Johannes Thumshirn
2017-01-12 9:16 ` 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=1484137213.2621.6.camel@redhat.com \
--to=jlayton@redhat.com \
--cc=bfields@fieldses.org \
--cc=jack@suse.cz \
--cc=jthumshirn@suse.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbenes@suse.cz \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.