block: clear BIO_PERCPU_CACHE flag if polling isn't supported
authorJens Axboe <axboe@kernel.dk>
Wed, 11 Aug 2021 16:19:06 +0000 (10:19 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 23 Aug 2021 19:44:51 +0000 (13:44 -0600)
The bio alloc cache relies on the fact that a polled bio will complete
in process context, clear the cacheable flag if we disable polling
for a given bio.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c

index 4f8449b..0d4d6b1 100644 (file)
@@ -832,8 +832,11 @@ static noinline_for_stack bool submit_bio_checks(struct bio *bio)
                }
        }
 
-       if (!test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
+       if (!test_bit(QUEUE_FLAG_POLL, &q->queue_flags)) {
+               /* can't support alloc cache if we turn off polling */
+               bio_clear_flag(bio, BIO_PERCPU_CACHE);
                bio->bi_opf &= ~REQ_HIPRI;
+       }
 
        switch (bio_op(bio)) {
        case REQ_OP_DISCARD: