coda: Implement splice-read
Implement splice-read for coda by passing the request down a layer rather than going through generic_file_splice_read() which is going to be changed to assume that ->read_folio() is present on buffered files. Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Jan Harkes <jaharkes@cs.cmu.edu> cc: Christoph Hellwig <hch@lst.de> cc: Jens Axboe <axboe@kernel.dk> cc: Al Viro <viro@zeniv.linux.org.uk> cc: John Hubbard <jhubbard@nvidia.com> cc: David Hildenbrand <david@redhat.com> cc: Matthew Wilcox <willy@infradead.org> cc: coda@cs.cmu.edu cc: codalist@coda.cs.cmu.edu cc: linux-unionfs@vger.kernel.org cc: linux-block@vger.kernel.org cc: linux-fsdevel@vger.kernel.org cc: linux-mm@kvack.org Link: https://lore.kernel.org/r/20230522135018.2742245-12-dhowells@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d4120d87a0
commit
a1be2935d0
@ -23,6 +23,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/splice.h>
|
||||
|
||||
#include <linux/coda.h>
|
||||
#include "coda_psdev.h"
|
||||
@ -94,6 +95,32 @@ finish_write:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
coda_file_splice_read(struct file *coda_file, loff_t *ppos,
|
||||
struct pipe_inode_info *pipe,
|
||||
size_t len, unsigned int flags)
|
||||
{
|
||||
struct inode *coda_inode = file_inode(coda_file);
|
||||
struct coda_file_info *cfi = coda_ftoc(coda_file);
|
||||
struct file *in = cfi->cfi_container;
|
||||
loff_t ki_pos = *ppos;
|
||||
ssize_t ret;
|
||||
|
||||
ret = venus_access_intent(coda_inode->i_sb, coda_i2f(coda_inode),
|
||||
&cfi->cfi_access_intent,
|
||||
len, ki_pos, CODA_ACCESS_TYPE_READ);
|
||||
if (ret)
|
||||
goto finish_read;
|
||||
|
||||
ret = vfs_splice_read(in, ppos, pipe, len, flags);
|
||||
|
||||
finish_read:
|
||||
venus_access_intent(coda_inode->i_sb, coda_i2f(coda_inode),
|
||||
&cfi->cfi_access_intent,
|
||||
len, ki_pos, CODA_ACCESS_TYPE_READ_FINISH);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
coda_vm_open(struct vm_area_struct *vma)
|
||||
{
|
||||
@ -302,5 +329,5 @@ const struct file_operations coda_file_operations = {
|
||||
.open = coda_open,
|
||||
.release = coda_release,
|
||||
.fsync = coda_fsync,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.splice_read = coda_file_splice_read,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user