From: Changli Gao <xiaosuo@gmail.com>
To: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
Changli Gao <xiaosuo@gmail.com>
Subject: [PATCH 2/3] splice: allow non-block splice only when in file is seekable
Date: Wed, 26 May 2010 17:56:08 +0800 [thread overview]
Message-ID: <1274867768-3011-1-git-send-email-xiaosuo@gmail.com> (raw)
allow non-block splice only when in file is seekable.
do_splice_to() is split to two parts: read data from in file to spd, and move
data from spd to pipe. If there isn't much space in pipe for the data in spd,
and the splice is called with non-block flag, the data dropped due to non
enough space in pipe will be lost forever when in file isn't seekable.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
----
fs/splice.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/fs/splice.c b/fs/splice.c
index 9e52de5..8137e23 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1346,8 +1346,12 @@ static long do_splice(struct file *in, loff_t __user *off_in,
if (copy_from_user(&offset, off_in, sizeof(loff_t)))
return -EFAULT;
off = &offset;
- } else
+ } else {
+ if ((flags & SPLICE_F_NONBLOCK) &&
+ !(in->f_mode & FMODE_PREAD))
+ return -EINVAL;
off = &in->f_pos;
+ }
ret = do_splice_to(in, off, opipe, len, flags);
next reply other threads:[~2010-05-26 9:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-26 9:56 Changli Gao [this message]
2010-05-26 10:29 ` [PATCH 2/3] splice: allow non-block splice only when in file is seekable Miklos Szeredi
2010-05-26 11:53 ` Changli Gao
2010-05-26 12:23 ` Miklos Szeredi
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=1274867768-3011-1-git-send-email-xiaosuo@gmail.com \
--to=xiaosuo@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@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).