@@ -558,3 +558,76 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,
558
558
_leave (" = %d" , ret );
559
559
return ret ;
560
560
}
561
+
562
+ /**
563
+ * netfs_buffered_read_iter - Filesystem buffered I/O read routine
564
+ * @iocb: kernel I/O control block
565
+ * @iter: destination for the data read
566
+ *
567
+ * This is the ->read_iter() routine for all filesystems that can use the page
568
+ * cache directly.
569
+ *
570
+ * The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be
571
+ * returned when no data can be read without waiting for I/O requests to
572
+ * complete; it doesn't prevent readahead.
573
+ *
574
+ * The IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests
575
+ * shall be made for the read or for readahead. When no data can be read,
576
+ * -EAGAIN shall be returned. When readahead would be triggered, a partial,
577
+ * possibly empty read shall be returned.
578
+ *
579
+ * Return:
580
+ * * number of bytes copied, even for partial reads
581
+ * * negative error code (or 0 if IOCB_NOIO) if nothing was read
582
+ */
583
+ ssize_t netfs_buffered_read_iter (struct kiocb * iocb , struct iov_iter * iter )
584
+ {
585
+ struct inode * inode = file_inode (iocb -> ki_filp );
586
+ struct netfs_inode * ictx = netfs_inode (inode );
587
+ ssize_t ret ;
588
+
589
+ if (WARN_ON_ONCE ((iocb -> ki_flags & IOCB_DIRECT ) ||
590
+ test_bit (NETFS_ICTX_UNBUFFERED , & ictx -> flags )))
591
+ return - EINVAL ;
592
+
593
+ ret = netfs_start_io_read (inode );
594
+ if (ret == 0 ) {
595
+ ret = filemap_read (iocb , iter , 0 );
596
+ netfs_end_io_read (inode );
597
+ }
598
+ return ret ;
599
+ }
600
+ EXPORT_SYMBOL (netfs_buffered_read_iter );
601
+
602
+ /**
603
+ * netfs_file_read_iter - Generic filesystem read routine
604
+ * @iocb: kernel I/O control block
605
+ * @iter: destination for the data read
606
+ *
607
+ * This is the ->read_iter() routine for all filesystems that can use the page
608
+ * cache directly.
609
+ *
610
+ * The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be
611
+ * returned when no data can be read without waiting for I/O requests to
612
+ * complete; it doesn't prevent readahead.
613
+ *
614
+ * The IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests
615
+ * shall be made for the read or for readahead. When no data can be read,
616
+ * -EAGAIN shall be returned. When readahead would be triggered, a partial,
617
+ * possibly empty read shall be returned.
618
+ *
619
+ * Return:
620
+ * * number of bytes copied, even for partial reads
621
+ * * negative error code (or 0 if IOCB_NOIO) if nothing was read
622
+ */
623
+ ssize_t netfs_file_read_iter (struct kiocb * iocb , struct iov_iter * iter )
624
+ {
625
+ struct netfs_inode * ictx = netfs_inode (iocb -> ki_filp -> f_mapping -> host );
626
+
627
+ if ((iocb -> ki_flags & IOCB_DIRECT ) ||
628
+ test_bit (NETFS_ICTX_UNBUFFERED , & ictx -> flags ))
629
+ return netfs_unbuffered_read_iter (iocb , iter );
630
+
631
+ return netfs_buffered_read_iter (iocb , iter );
632
+ }
633
+ EXPORT_SYMBOL (netfs_file_read_iter );
0 commit comments