From 0c94d3838defdf59d07b78bb89ecd8d1c22e035d Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Sat, 31 May 2025 00:25:09 +1000 Subject: [PATCH] linux/zvol_os: don't try to set disk ops if alloc fails If the kernel fails to allocate the gendisk, zvo_disk will be NULL, and derefencing it will explode. So don't do that. Sponsored-by: Klara, Inc. Reviewed-by: Brian Behlendorf Reviewed-by: Alexander Motin Reviewed-by: Tony Hutter Signed-off-by: Rob Norris Closes #17396 --- module/os/linux/zfs/zvol_os.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c index 5a6c691b0..a4bd4bd2a 100644 --- a/module/os/linux/zfs/zvol_os.c +++ b/module/os/linux/zfs/zvol_os.c @@ -1352,13 +1352,15 @@ zvol_alloc(dev_t dev, const char *name, uint64_t volblocksize) */ if (zv->zv_zso->use_blk_mq) { ret = zvol_alloc_blk_mq(zv, &limits); + if (ret != 0) + goto out_kmem; zso->zvo_disk->fops = &zvol_ops_blk_mq; } else { ret = zvol_alloc_non_blk_mq(zso, &limits); + if (ret != 0) + goto out_kmem; zso->zvo_disk->fops = &zvol_ops; } - if (ret != 0) - goto out_kmem; /* Limit read-ahead to a single page to prevent over-prefetching. */ blk_queue_set_read_ahead(zso->zvo_queue, 1);