Linux 6.9 compat: blk_alloc_disk() now takes two args
There's an extra nullable arg for queue limits. Detect it, and set it to NULL. Similar change for blk_mq_alloc_disk(), now three args, same treatment. Error return now has error encoded in the return, so detect with IS_ERR() and explicitly NULL our own return. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://despairlabs.com/sponsor/ Closes #16027 Closes #16033
This commit is contained in:
parent
3bd7cd06b7
commit
9a7ef02f4d
|
@ -50,6 +50,14 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN], [
|
||||||
disk = blk_alloc_disk(NUMA_NO_NODE);
|
disk = blk_alloc_disk(NUMA_NO_NODE);
|
||||||
])
|
])
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([blk_alloc_disk_2arg], [
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
],[
|
||||||
|
struct queue_limits *lim = NULL;
|
||||||
|
struct gendisk *disk __attribute__ ((unused));
|
||||||
|
disk = blk_alloc_disk(lim, NUMA_NO_NODE);
|
||||||
|
])
|
||||||
|
|
||||||
ZFS_LINUX_TEST_SRC([blk_cleanup_disk], [
|
ZFS_LINUX_TEST_SRC([blk_cleanup_disk], [
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
],[
|
],[
|
||||||
|
@ -96,6 +104,31 @@ AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [
|
||||||
], [
|
], [
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # Linux 6.9 API Change:
|
||||||
|
dnl # blk_alloc_queue() takes a nullable queue_limits arg.
|
||||||
|
dnl #
|
||||||
|
AC_MSG_CHECKING([whether blk_alloc_disk() exists and takes 2 args])
|
||||||
|
ZFS_LINUX_TEST_RESULT([blk_alloc_disk_2arg], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE([HAVE_BLK_ALLOC_DISK_2ARG], 1, [blk_alloc_disk() exists and takes 2 args])
|
||||||
|
|
||||||
|
dnl #
|
||||||
|
dnl # 5.20 API change,
|
||||||
|
dnl # Removed blk_cleanup_disk(), put_disk() should be used.
|
||||||
|
dnl #
|
||||||
|
AC_MSG_CHECKING([whether blk_cleanup_disk() exists])
|
||||||
|
ZFS_LINUX_TEST_RESULT([blk_cleanup_disk], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE([HAVE_BLK_CLEANUP_DISK], 1,
|
||||||
|
[blk_cleanup_disk() exists])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
|
|
|
@ -1082,6 +1082,16 @@ zvol_alloc_non_blk_mq(struct zvol_state_os *zso)
|
||||||
if (zso->zvo_disk == NULL)
|
if (zso->zvo_disk == NULL)
|
||||||
return (1);
|
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_disk->minors = ZVOL_MINORS;
|
||||||
zso->zvo_queue = zso->zvo_disk->queue;
|
zso->zvo_queue = zso->zvo_disk->queue;
|
||||||
#else
|
#else
|
||||||
|
@ -1132,6 +1142,17 @@ zvol_alloc_blk_mq(zvol_state_t *zv)
|
||||||
}
|
}
|
||||||
zso->zvo_queue = zso->zvo_disk->queue;
|
zso->zvo_queue = zso->zvo_disk->queue;
|
||||||
zso->zvo_disk->minors = ZVOL_MINORS;
|
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
|
#else
|
||||||
zso->zvo_disk = alloc_disk(ZVOL_MINORS);
|
zso->zvo_disk = alloc_disk(ZVOL_MINORS);
|
||||||
if (zso->zvo_disk == NULL) {
|
if (zso->zvo_disk == NULL) {
|
||||||
|
@ -1285,7 +1306,7 @@ zvol_os_free(zvol_state_t *zv)
|
||||||
|
|
||||||
del_gendisk(zv->zv_zso->zvo_disk);
|
del_gendisk(zv->zv_zso->zvo_disk);
|
||||||
#if defined(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS) && \
|
#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)
|
#if defined(HAVE_BLK_CLEANUP_DISK)
|
||||||
blk_cleanup_disk(zv->zv_zso->zvo_disk);
|
blk_cleanup_disk(zv->zv_zso->zvo_disk);
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue