On Mon 22-05-23 21:57:41, David Howells wrote: > From: Christoph Hellwig <hch@xxxxxx> > > Replace BIO_NO_PAGE_REF with a BIO_PAGE_REFFED flag that has the inverted > meaning is only set when a page reference has been acquired that needs to > be released by bio_release_pages(). > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: David Howells <dhowells@xxxxxxxxxx> > Reviewed-by: John Hubbard <jhubbard@xxxxxxxxxx> > cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > cc: Jens Axboe <axboe@xxxxxxxxx> > cc: Jan Kara <jack@xxxxxxx> > cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> > cc: Logan Gunthorpe <logang@xxxxxxxxxxxx> > cc: linux-block@xxxxxxxxxxxxxxx Looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > > Notes: > ver #8) > - Split out from another patch [hch]. > - Don't default to BIO_PAGE_REFFED [hch]. > > ver #5) > - Split from patch that uses iov_iter_extract_pages(). > > block/bio.c | 2 +- > block/blk-map.c | 1 + > fs/direct-io.c | 2 ++ > fs/iomap/direct-io.c | 1 - > include/linux/bio.h | 2 +- > include/linux/blk_types.h | 2 +- > 6 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/block/bio.c b/block/bio.c > index 043944fd46eb..8516adeaea26 100644 > --- a/block/bio.c > +++ b/block/bio.c > @@ -1191,7 +1191,6 @@ void bio_iov_bvec_set(struct bio *bio, struct iov_iter *iter) > bio->bi_io_vec = (struct bio_vec *)iter->bvec; > bio->bi_iter.bi_bvec_done = iter->iov_offset; > bio->bi_iter.bi_size = size; > - bio_set_flag(bio, BIO_NO_PAGE_REF); > bio_set_flag(bio, BIO_CLONED); > } > > @@ -1336,6 +1335,7 @@ int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter) > return 0; > } > > + bio_set_flag(bio, BIO_PAGE_REFFED); > do { > ret = __bio_iov_iter_get_pages(bio, iter); > } while (!ret && iov_iter_count(iter) && !bio_full(bio, 0)); > diff --git a/block/blk-map.c b/block/blk-map.c > index 04c55f1c492e..33d9f6e89ba6 100644 > --- a/block/blk-map.c > +++ b/block/blk-map.c > @@ -282,6 +282,7 @@ static int bio_map_user_iov(struct request *rq, struct iov_iter *iter, > if (blk_queue_pci_p2pdma(rq->q)) > extraction_flags |= ITER_ALLOW_P2PDMA; > > + bio_set_flag(bio, BIO_PAGE_REFFED); > while (iov_iter_count(iter)) { > struct page **pages, *stack_pages[UIO_FASTIOV]; > ssize_t bytes; > diff --git a/fs/direct-io.c b/fs/direct-io.c > index 0b380bb8a81e..ad20f3428bab 100644 > --- a/fs/direct-io.c > +++ b/fs/direct-io.c > @@ -402,6 +402,8 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio, > bio->bi_end_io = dio_bio_end_aio; > else > bio->bi_end_io = dio_bio_end_io; > + /* for now require references for all pages */ > + bio_set_flag(bio, BIO_PAGE_REFFED); > sdio->bio = bio; > sdio->logical_offset_in_bio = sdio->cur_page_fs_offset; > } > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index 66a9f10e3207..08873f0627dd 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -203,7 +203,6 @@ static void iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, > bio->bi_private = dio; > bio->bi_end_io = iomap_dio_bio_end_io; > > - bio_set_flag(bio, BIO_NO_PAGE_REF); > __bio_add_page(bio, page, len, 0); > iomap_dio_submit_bio(iter, dio, bio, pos); > } > diff --git a/include/linux/bio.h b/include/linux/bio.h > index 7f53be035cf0..0922729acd26 100644 > --- a/include/linux/bio.h > +++ b/include/linux/bio.h > @@ -488,7 +488,7 @@ void zero_fill_bio(struct bio *bio); > > static inline void bio_release_pages(struct bio *bio, bool mark_dirty) > { > - if (!bio_flagged(bio, BIO_NO_PAGE_REF)) > + if (bio_flagged(bio, BIO_PAGE_REFFED)) > __bio_release_pages(bio, mark_dirty); > } > > diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h > index 740afe80f297..dfd2c2cb909d 100644 > --- a/include/linux/blk_types.h > +++ b/include/linux/blk_types.h > @@ -323,7 +323,7 @@ struct bio { > * bio flags > */ > enum { > - BIO_NO_PAGE_REF, /* don't put release vec pages */ > + BIO_PAGE_REFFED, /* put pages in bio_release_pages() */ > BIO_CLONED, /* doesn't own data */ > BIO_BOUNCED, /* bio is a bounce bio */ > BIO_QUIET, /* Make BIO Quiet */ > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR