提交 9e97198d 编写于 作者: J Jens Axboe

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: NJens Axboe <jens.axboe@oracle.com>
上级 12f32bb3
...@@ -1031,7 +1031,11 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, ...@@ -1031,7 +1031,11 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
goto out_release; goto out_release;
} }
done:
pipe->nrbufs = pipe->curbuf = 0; pipe->nrbufs = pipe->curbuf = 0;
if (bytes > 0)
file_accessed(in);
return bytes; return bytes;
out_release: out_release:
...@@ -1047,16 +1051,11 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, ...@@ -1047,16 +1051,11 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
buf->ops = NULL; 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); EXPORT_SYMBOL(splice_direct_to_actor);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册