@@ -558,3 +558,76 @@ int netfs_prefetch_for_write(struct file *file, struct folio *folio,
558558 _leave (" = %d" , ret );
559559 return ret ;
560560}
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