@@ -337,6 +337,26 @@ static ssize_t orangefs_file_read_iter(struct kiocb *iocb,
337
337
return ret ;
338
338
}
339
339
340
+ static ssize_t orangefs_file_splice_read (struct file * in , loff_t * ppos ,
341
+ struct pipe_inode_info * pipe ,
342
+ size_t len , unsigned int flags )
343
+ {
344
+ struct inode * inode = file_inode (in );
345
+ ssize_t ret ;
346
+
347
+ orangefs_stats .reads ++ ;
348
+
349
+ down_read (& inode -> i_rwsem );
350
+ ret = orangefs_revalidate_mapping (inode );
351
+ if (ret )
352
+ goto out ;
353
+
354
+ ret = filemap_splice_read (in , ppos , pipe , len , flags );
355
+ out :
356
+ up_read (& inode -> i_rwsem );
357
+ return ret ;
358
+ }
359
+
340
360
static ssize_t orangefs_file_write_iter (struct kiocb * iocb ,
341
361
struct iov_iter * iter )
342
362
{
@@ -556,7 +576,7 @@ const struct file_operations orangefs_file_operations = {
556
576
.lock = orangefs_lock ,
557
577
.mmap = orangefs_file_mmap ,
558
578
.open = generic_file_open ,
559
- .splice_read = generic_file_splice_read ,
579
+ .splice_read = orangefs_file_splice_read ,
560
580
.splice_write = iter_file_splice_write ,
561
581
.flush = orangefs_flush ,
562
582
.release = orangefs_file_release ,
0 commit comments