diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2008-01-29 21:05:57 +0100 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-01-29 21:55:20 +0100 |
commit | 9e97198dbf318be7958b57900d05b37c7e09ad7c (patch) | |
tree | f74fdf942c1b4c09c59d7f2b8ac4a48e8a471a71 | |
parent | 12f32bb31772e72d8cf52a29f961561bccc54c37 (diff) | |
download | linux-9e97198dbf318be7958b57900d05b37c7e09ad7c.tar.gz linux-9e97198dbf318be7958b57900d05b37c7e09ad7c.tar.bz2 linux-9e97198dbf318be7958b57900d05b37c7e09ad7c.zip |
splice: fix problem with atime not being updated
A bug report on nfsd that states that since it was switched to use
splice instead of sendfile, the atime was no longer being updated
on the input file. do_generic_mapping_read() does this when accessing
the file, make splice do it for the direct splice handler.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r-- | fs/splice.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/fs/splice.c b/fs/splice.c index 0a0b79b01d05..1577a7391d23 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1031,7 +1031,11 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, goto out_release; } +done: pipe->nrbufs = pipe->curbuf = 0; + if (bytes > 0) + file_accessed(in); + return bytes; out_release: @@ -1047,16 +1051,11 @@ out_release: buf->ops = NULL; } } - pipe->nrbufs = pipe->curbuf = 0; - - /* - * If we transferred some data, return the number of bytes: - */ - if (bytes > 0) - return bytes; - return ret; + if (!bytes) + bytes = ret; + goto done; } EXPORT_SYMBOL(splice_direct_to_actor); |