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@lst.de>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
cc: Al Viro <viro@zeniv.linux.org.uk>
cc: Jens Axboe <axboe@kernel.dk>
cc: Jan Kara <jack@suse.cz>
cc: Matthew Wilcox <willy@infradead.org>
cc: Logan Gunthorpe <logang@deltatee.com>
cc: linux-block@vger.kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230522205744.2825689-4-dhowells@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
 
        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);
 }
 
                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));
 
        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;
 
                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;
 }
 
        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);
 }
 
 
 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);
 }
 
 
  * 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 */