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_BLKDEV
|
||||
ZFS_AC_KERNEL_SRC_BLK_QUEUE
|
||||
ZFS_AC_KERNEL_SRC_GENHD_FLAGS
|
||||
ZFS_AC_KERNEL_SRC_REVALIDATE_DISK
|
||||
ZFS_AC_KERNEL_SRC_GET_DISK_RO
|
||||
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_BLKDEV
|
||||
ZFS_AC_KERNEL_BLK_QUEUE
|
||||
ZFS_AC_KERNEL_GENHD_FLAGS
|
||||
ZFS_AC_KERNEL_REVALIDATE_DISK
|
||||
ZFS_AC_KERNEL_GET_DISK_RO
|
||||
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->events = DISK_EVENT_MEDIA_CHANGE;
|
||||
|
||||
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.
|
||||
* 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) {
|
||||
zso->zvo_disk->minors = 1;
|
||||
#if defined(GENHD_FL_EXT_DEVT)
|
||||
zso->zvo_disk->flags &= ~GENHD_FL_EXT_DEVT;
|
||||
#endif
|
||||
#if defined(GENHD_FL_NO_PART_SCAN)
|
||||
zso->zvo_disk->flags |= GENHD_FL_NO_PART_SCAN;
|
||||
#endif
|
||||
zso->zvo_disk->flags &= ~ZFS_GENHD_FL_EXT_DEVT;
|
||||
zso->zvo_disk->flags |= ZFS_GENHD_FL_NO_PART;
|
||||
}
|
||||
|
||||
zso->zvo_disk->first_minor = (dev & MINORMASK);
|
||||
zso->zvo_disk->fops = &zvol_ops;
|
||||
zso->zvo_disk->private_data = zv;
|
||||
|
|
Loading…
Reference in New Issue