diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2007-06-12 21:17:17 +0200 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2007-07-10 08:04:12 +0200 |
commit | c66ab6fa705e1b2887a6d9246b798bdc526839e2 (patch) | |
tree | 764ece0ee44f937012dfaa1657709da548ed5b16 /fs/ocfs2/file.c | |
parent | 71780f59e127bb281a9302d430495ca9586c14e7 (diff) | |
download | kernel_samsung_aries-c66ab6fa705e1b2887a6d9246b798bdc526839e2.zip kernel_samsung_aries-c66ab6fa705e1b2887a6d9246b798bdc526839e2.tar.gz kernel_samsung_aries-c66ab6fa705e1b2887a6d9246b798bdc526839e2.tar.bz2 |
splice: abstract out actor data
For direct splicing (or private splicing), the output may not be a file.
So abstract out the handling into a specified actor function and put
the data in the splice_desc structure earlier, so we can build on top
of that.
This is the first step in better splice handling for drivers, and also
for implementing vmsplice _to_ user memory.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'fs/ocfs2/file.c')
-rw-r--r-- | fs/ocfs2/file.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index ac6c964..93565c0 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1636,9 +1636,14 @@ static ssize_t __ocfs2_file_splice_write(struct pipe_inode_info *pipe, int ret, err; struct address_space *mapping = out->f_mapping; struct inode *inode = mapping->host; - - ret = __splice_from_pipe(pipe, out, ppos, len, flags, - ocfs2_splice_write_actor); + struct splice_desc sd = { + .total_len = len, + .flags = flags, + .pos = *ppos, + .file = out, + }; + + ret = __splice_from_pipe(pipe, &sd, ocfs2_splice_write_actor); if (ret > 0) { *ppos += ret; |