@@ -25,6 +25,9 @@ static void afs_invalidate_folio(struct folio *folio, size_t offset,
25
25
static bool afs_release_folio (struct folio * folio , gfp_t gfp_flags );
26
26
27
27
static ssize_t afs_file_read_iter (struct kiocb * iocb , struct iov_iter * iter );
28
+ static ssize_t afs_file_splice_read (struct file * in , loff_t * ppos ,
29
+ struct pipe_inode_info * pipe ,
30
+ size_t len , unsigned int flags );
28
31
static void afs_vm_open (struct vm_area_struct * area );
29
32
static void afs_vm_close (struct vm_area_struct * area );
30
33
static vm_fault_t afs_vm_map_pages (struct vm_fault * vmf , pgoff_t start_pgoff , pgoff_t end_pgoff );
@@ -36,7 +39,7 @@ const struct file_operations afs_file_operations = {
36
39
.read_iter = afs_file_read_iter ,
37
40
.write_iter = afs_file_write ,
38
41
.mmap = afs_file_mmap ,
39
- .splice_read = generic_file_splice_read ,
42
+ .splice_read = afs_file_splice_read ,
40
43
.splice_write = iter_file_splice_write ,
41
44
.fsync = afs_fsync ,
42
45
.lock = afs_lock ,
@@ -587,3 +590,18 @@ static ssize_t afs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
587
590
588
591
return generic_file_read_iter (iocb , iter );
589
592
}
593
+
594
+ static ssize_t afs_file_splice_read (struct file * in , loff_t * ppos ,
595
+ struct pipe_inode_info * pipe ,
596
+ size_t len , unsigned int flags )
597
+ {
598
+ struct afs_vnode * vnode = AFS_FS_I (file_inode (in ));
599
+ struct afs_file * af = in -> private_data ;
600
+ int ret ;
601
+
602
+ ret = afs_validate (vnode , af -> key );
603
+ if (ret < 0 )
604
+ return ret ;
605
+
606
+ return generic_file_splice_read (in , ppos , pipe , len , flags );
607
+ }
0 commit comments