block: clear bio->bi_bdev when putting a bio back in the cache
authorJens Axboe <axboe@kernel.dk>
Fri, 24 Feb 2023 16:59:44 +0000 (09:59 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:34:02 +0000 (09:34 +0100)
commit 11eb695feb636fa5211067189cad25ac073e7fe5 upstream.

This isn't strictly needed in terms of correctness, but it does allow
polling to know if the bio has been put already by a different task
and hence avoid polling something that we don't need to.

Cc: stable@vger.kernel.org
Fixes: be4d234d7aeb ("bio: add allocation cache abstraction")
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
block/bio.c

index 57c2f327225bd13da2cc00506aeeb2986d13b637..d5cd825d6efc0fd89b93c51a449dfb0861648d90 100644 (file)
@@ -747,6 +747,7 @@ void bio_put(struct bio *bio)
                bio_uninit(bio);
                cache = per_cpu_ptr(bio->bi_pool->cache, get_cpu());
                bio->bi_next = cache->free_list;
+               bio->bi_bdev = NULL;
                cache->free_list = bio;
                if (++cache->nr > ALLOC_CACHE_MAX + ALLOC_CACHE_SLACK)
                        bio_alloc_cache_prune(cache, ALLOC_CACHE_SLACK);