]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/os/linux/zfs/zvol_os.c
Linux 6.9 compat: blk_alloc_disk() now takes two args
[mirror_zfs.git] / module / os / linux / zfs / zvol_os.c
index 26cc63d426eb1c93f534cf1a96f52fc8767a9879..d815cb2ad2c42df42323c56d4493f5cf030c2786 100644 (file)
@@ -1053,6 +1053,16 @@ zvol_alloc_non_blk_mq(struct zvol_state_os *zso)
        if (zso->zvo_disk == NULL)
                return (1);
 
+       zso->zvo_disk->minors = ZVOL_MINORS;
+       zso->zvo_queue = zso->zvo_disk->queue;
+#elif defined(HAVE_BLK_ALLOC_DISK_2ARG)
+       struct gendisk *disk = blk_alloc_disk(NULL, NUMA_NO_NODE);
+       if (IS_ERR(disk)) {
+               zso->zvo_disk = NULL;
+               return (1);
+       }
+
+       zso->zvo_disk = disk;
        zso->zvo_disk->minors = ZVOL_MINORS;
        zso->zvo_queue = zso->zvo_disk->queue;
 #else
@@ -1103,6 +1113,17 @@ zvol_alloc_blk_mq(zvol_state_t *zv)
        }
        zso->zvo_queue = zso->zvo_disk->queue;
        zso->zvo_disk->minors = ZVOL_MINORS;
+#elif defined(HAVE_BLK_ALLOC_DISK_2ARG)
+       struct gendisk *disk = blk_mq_alloc_disk(&zso->tag_set, NULL, zv);
+       if (IS_ERR(disk)) {
+               zso->zvo_disk = NULL;
+               blk_mq_free_tag_set(&zso->tag_set);
+               return (1);
+       }
+
+       zso->zvo_disk = disk;
+       zso->zvo_queue = zso->zvo_disk->queue;
+       zso->zvo_disk->minors = ZVOL_MINORS;
 #else
        zso->zvo_disk = alloc_disk(ZVOL_MINORS);
        if (zso->zvo_disk == NULL) {
@@ -1256,7 +1277,7 @@ zvol_os_free(zvol_state_t *zv)
 
        del_gendisk(zv->zv_zso->zvo_disk);
 #if defined(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS) && \
-       defined(HAVE_BLK_ALLOC_DISK)
+       (defined(HAVE_BLK_ALLOC_DISK) || defined(HAVE_BLK_ALLOC_DISK_2ARG))
 #if defined(HAVE_BLK_CLEANUP_DISK)
        blk_cleanup_disk(zv->zv_zso->zvo_disk);
 #else