On Wed, Jul 08, 2026 at 08:42:38PM +0800, Joseph Qi wrote:
> diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c
> index 4176046627beb..081370aac6317 100644
> --- a/drivers/nvdimm/nd_virtio.c
> +++ b/drivers/nvdimm/nd_virtio.c
> @@ -117,7 +117,7 @@ int async_pmem_flush(struct nd_region *nd_region, struct 
> bio *bio)
>       if (bio && bio->bi_iter.bi_sector != -1) {
>               struct bio *child = bio_alloc(bio->bi_bdev, 0,
>                                             REQ_OP_WRITE | REQ_PREFLUSH,
> -                                           GFP_ATOMIC);
> +                                           GFP_NOIO);
>  
>               if (!child)
>                       return -ENOMEM;

This NULL  check can go away now, and probaby should to avoid confusion.

Also bio_alloc allocates from fs_bio_set, so if the incoming bio
is from that, we can still deadlock.  We'll need a separate bio_set
for this to be deadlock free.  disk->bio_split isn't otherwise
used for the drivers/nvdimm/ driverss, so you might be able to
repurpose that if you want to be creative.

Reply via email to