Linux 5.17 compat: GENHD_FL_EXT_DEVT / GENHD_FL_NO_PART_SCAN
As of the 5.17 kernel the GENHD_FL_EXT_DEVT flag has been removed and the GENHD_FL_NO_PART_SCAN flag renamed GENHD_FL_NO_PART. Update zvol_alloc() to set GENHD_FL_NO_PART for the newer kernels which is sufficient. The behavior for prior kernels remains unchanged. 1ebe2e5f ("block: remove GENHD_FL_EXT_DEVT") 46e7eac6 ("block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART") Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #13294 Closes #13297
This commit is contained in:
parent
b7546f92ea
commit
aa1c3c1d1d
|
@ -0,0 +1,58 @@
|
||||||
|
dnl #
|
||||||
|
dnl # 5.17 API change,
|
||||||
|
dnl #
|
||||||
|
dnl # GENHD_FL_EXT_DEVT flag removed
|
||||||
|
dnl # GENHD_FL_NO_PART_SCAN renamed GENHD_FL_NO_PART
|
||||||
|
dnl #
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_GENHD_FLAGS], [
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([genhd_fl_ext_devt], [
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
], [
|
||||||
|
int flags __attribute__ ((unused)) = GENHD_FL_EXT_DEVT;
|
||||||
|
])
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([genhd_fl_no_part], [
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
], [
|
||||||
|
int flags __attribute__ ((unused)) = GENHD_FL_NO_PART;
|
||||||
|
])
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([genhd_fl_no_part_scan], [
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
], [
|
||||||
|
int flags __attribute__ ((unused)) = GENHD_FL_NO_PART_SCAN;
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([ZFS_AC_KERNEL_GENHD_FLAGS], [
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether GENHD_FL_EXT_DEVT flag is available])
|
||||||
|
ZFS_LINUX_TEST_RESULT([genhd_fl_ext_devt], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(ZFS_GENHD_FL_EXT_DEVT, GENHD_FL_EXT_DEVT,
|
||||||
|
[GENHD_FL_EXT_DEVT flag is available])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_DEFINE(ZFS_GENHD_FL_EXT_DEVT, 0,
|
||||||
|
[GENHD_FL_EXT_DEVT flag is not available])
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether GENHD_FL_NO_PART flag is available])
|
||||||
|
ZFS_LINUX_TEST_RESULT([genhd_fl_no_part], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(ZFS_GENHD_FL_NO_PART, GENHD_FL_NO_PART,
|
||||||
|
[GENHD_FL_NO_PART flag is available])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether GENHD_FL_NO_PART_SCAN flag is available])
|
||||||
|
ZFS_LINUX_TEST_RESULT([genhd_fl_no_part_scan], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(ZFS_GENHD_FL_NO_PART, GENHD_FL_NO_PART_SCAN,
|
||||||
|
[GENHD_FL_NO_PART_SCAN flag is available])
|
||||||
|
], [
|
||||||
|
ZFS_LINUX_TEST_ERROR([GENHD_FL_NO_PART|GENHD_FL_NO_PART_SCAN])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
|
@ -61,6 +61,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
||||||
ZFS_AC_KERNEL_SRC_BIO
|
ZFS_AC_KERNEL_SRC_BIO
|
||||||
ZFS_AC_KERNEL_SRC_BLKDEV
|
ZFS_AC_KERNEL_SRC_BLKDEV
|
||||||
ZFS_AC_KERNEL_SRC_BLK_QUEUE
|
ZFS_AC_KERNEL_SRC_BLK_QUEUE
|
||||||
|
ZFS_AC_KERNEL_SRC_GENHD_FLAGS
|
||||||
ZFS_AC_KERNEL_SRC_REVALIDATE_DISK
|
ZFS_AC_KERNEL_SRC_REVALIDATE_DISK
|
||||||
ZFS_AC_KERNEL_SRC_GET_DISK_RO
|
ZFS_AC_KERNEL_SRC_GET_DISK_RO
|
||||||
ZFS_AC_KERNEL_SRC_GENERIC_READLINK_GLOBAL
|
ZFS_AC_KERNEL_SRC_GENERIC_READLINK_GLOBAL
|
||||||
|
@ -172,6 +173,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
||||||
ZFS_AC_KERNEL_BIO
|
ZFS_AC_KERNEL_BIO
|
||||||
ZFS_AC_KERNEL_BLKDEV
|
ZFS_AC_KERNEL_BLKDEV
|
||||||
ZFS_AC_KERNEL_BLK_QUEUE
|
ZFS_AC_KERNEL_BLK_QUEUE
|
||||||
|
ZFS_AC_KERNEL_GENHD_FLAGS
|
||||||
ZFS_AC_KERNEL_REVALIDATE_DISK
|
ZFS_AC_KERNEL_REVALIDATE_DISK
|
||||||
ZFS_AC_KERNEL_GET_DISK_RO
|
ZFS_AC_KERNEL_GET_DISK_RO
|
||||||
ZFS_AC_KERNEL_GENERIC_READLINK_GLOBAL
|
ZFS_AC_KERNEL_GENERIC_READLINK_GLOBAL
|
||||||
|
|
|
@ -903,22 +903,17 @@ zvol_alloc(dev_t dev, const char *name)
|
||||||
zso->zvo_disk->major = zvol_major;
|
zso->zvo_disk->major = zvol_major;
|
||||||
zso->zvo_disk->events = DISK_EVENT_MEDIA_CHANGE;
|
zso->zvo_disk->events = DISK_EVENT_MEDIA_CHANGE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Setting ZFS_VOLMODE_DEV disables partitioning on ZVOL devices.
|
||||||
|
* This is accomplished by limiting the number of minors for the
|
||||||
|
* device to one and explicitly disabling partition scanning.
|
||||||
|
*/
|
||||||
if (volmode == ZFS_VOLMODE_DEV) {
|
if (volmode == ZFS_VOLMODE_DEV) {
|
||||||
/*
|
|
||||||
* ZFS_VOLMODE_DEV disable partitioning on ZVOL devices: set
|
|
||||||
* gendisk->minors = 1 as noted in include/linux/blkdev.h.
|
|
||||||
* Also disable extended partition numbers (GENHD_FL_EXT_DEVT)
|
|
||||||
* and suppresses partition scanning (GENHD_FL_NO_PART_SCAN)
|
|
||||||
* setting gendisk->flags accordingly.
|
|
||||||
*/
|
|
||||||
zso->zvo_disk->minors = 1;
|
zso->zvo_disk->minors = 1;
|
||||||
#if defined(GENHD_FL_EXT_DEVT)
|
zso->zvo_disk->flags &= ~ZFS_GENHD_FL_EXT_DEVT;
|
||||||
zso->zvo_disk->flags &= ~GENHD_FL_EXT_DEVT;
|
zso->zvo_disk->flags |= ZFS_GENHD_FL_NO_PART;
|
||||||
#endif
|
|
||||||
#if defined(GENHD_FL_NO_PART_SCAN)
|
|
||||||
zso->zvo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zso->zvo_disk->first_minor = (dev & MINORMASK);
|
zso->zvo_disk->first_minor = (dev & MINORMASK);
|
||||||
zso->zvo_disk->fops = &zvol_ops;
|
zso->zvo_disk->fops = &zvol_ops;
|
||||||
zso->zvo_disk->private_data = zv;
|
zso->zvo_disk->private_data = zv;
|
||||||
|
|
Loading…
Reference in New Issue