relay: fix splice problem
authorTom Zanussi <zanussi@comcast.ne>
Thu, 24 Apr 2008 10:52:20 +0000 (12:52 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 29 Apr 2008 07:48:15 +0000 (09:48 +0200)
Splice isn't always incrementing the ppos correctly, which broke
relay splice.

Signed-off-by: Tom Zanussi <zanussi@comcast.net>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
fs/splice.c
kernel/relay.c

index eeb1a86a701467fcc90882f803ff7b39585003fc..633f58ebfb72a2ad7b132adb7492f7c268daecca 100644 (file)
@@ -1075,7 +1075,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
 
        ret = splice_direct_to_actor(in, &sd, direct_splice_actor);
        if (ret > 0)
-               *ppos += ret;
+               *ppos = sd.pos;
 
        return ret;
 }
index d6204a4858183c754d5d401ad230c11f60a546c1..dc873fba90d27c74fa145f1df6caec132225c7eb 100644 (file)
@@ -1162,7 +1162,7 @@ static ssize_t relay_file_splice_read(struct file *in,
        ret = 0;
        spliced = 0;
 
-       while (len) {
+       while (len && !spliced) {
                ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret);
                if (ret < 0)
                        break;