On Tue, Dec 13, 2022 at 11:02:59AM -0800, Eric Biggers wrote: > On Tue, Dec 13, 2022 at 06:29:33PM +0100, Andrey Albershteyn wrote: > > Add fs-verity page verification in read IO path. The verification > > itself is offloaded into workqueue (provided by fs-verity). > > > > The work_struct items are allocated from bioset side by side with > > bio being processed. > > > > As inodes with fs-verity doesn't use large folios we check only > > first page of the folio for errors (set by fs-verity if verification > > failed). > > > > Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx> > > --- > > fs/iomap/buffered-io.c | 80 +++++++++++++++++++++++++++++++++++++++--- > > include/linux/iomap.h | 5 +++ > > 2 files changed, 81 insertions(+), 4 deletions(-) > > > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > > index 91ee0b308e13d..b7abc2f806cfc 100644 > > --- a/fs/iomap/buffered-io.c > > +++ b/fs/iomap/buffered-io.c > > @@ -17,6 +17,7 @@ > > #include <linux/bio.h> > > #include <linux/sched/signal.h> > > #include <linux/migrate.h> > > +#include <linux/fsverity.h> > > #include "trace.h" > > > > #include "../internal.h" > > @@ -42,6 +43,7 @@ static inline struct iomap_page *to_iomap_page(struct folio *folio) > > } > > > > static struct bio_set iomap_ioend_bioset; > > +static struct bio_set iomap_readend_bioset; > > > > static struct iomap_page * > > iomap_page_create(struct inode *inode, struct folio *folio, unsigned int flags) > > @@ -189,9 +191,39 @@ static void iomap_read_end_io(struct bio *bio) > > int error = blk_status_to_errno(bio->bi_status); > > struct folio_iter fi; > > > > - bio_for_each_folio_all(fi, bio) > > + bio_for_each_folio_all(fi, bio) { > > + /* > > + * As fs-verity doesn't work with multi-page folios, verity > > + * inodes have large folios disabled (only single page folios > > + * are used) > > + */ > > + if (!error) > > + error = PageError(folio_page(fi.folio, 0)); > > + > > iomap_finish_folio_read(fi.folio, fi.offset, fi.length, error); > > + } > > fs/verity/ no longer uses PG_error to report errors. See upstream commit > 98dc08bae678 ("fsverity: stop using PG_error to track error status"). Thanks! Missed that. > > - Eric > -- - Andrey