diff options
author | Coleman Kane <[email protected]> | 2021-05-11 22:53:02 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2021-05-27 22:09:26 -0700 |
commit | 17351a79e28610b31f7baab291af6961185b651e (patch) | |
tree | 287491e3c48800f81316a6b590ef062efe57c2b6 | |
parent | 1cb517aebd5d4d5243689359632b8d6299057fd4 (diff) |
linux 5.13 compat: bdevops->revalidate_disk() removed
Linux kernel commit 0f00b82e5413571ed225ddbccad6882d7ea60bc7 removes the
revalidate_disk() handler from struct block_device_operations. This
caused a regression, and this commit eliminates the call to it and the
assignment in the block_device_operations static handler assignment
code, when configure identifies that the kernel doesn't support that
API handler.
Reviewed-by: Colin Ian King <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Coleman Kane <[email protected]>
Closes #11967
Closes #11977
-rw-r--r-- | config/kernel-block-device-operations.m4 | 32 | ||||
-rw-r--r-- | include/os/linux/kernel/linux/blkdev_compat.h | 4 | ||||
-rw-r--r-- | module/os/linux/zfs/zvol_os.c | 2 |
3 files changed, 38 insertions, 0 deletions
diff --git a/config/kernel-block-device-operations.m4 b/config/kernel-block-device-operations.m4 index 8e64ecca9..a48618185 100644 --- a/config/kernel-block-device-operations.m4 +++ b/config/kernel-block-device-operations.m4 @@ -52,12 +52,44 @@ AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [ ]) ]) +dnl # +dnl # 5.13 API change +dnl # block_device_operations->revalidate_disk() was removed +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [ + ZFS_LINUX_TEST_SRC([block_device_operations_revalidate_disk], [ + #include <linux/blkdev.h> + + int blk_revalidate_disk(struct gendisk *disk) { + return(0); + } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .revalidate_disk = blk_revalidate_disk, + }; + ], [], [$NO_UNUSED_BUT_SET_VARIABLE]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [ + AC_MSG_CHECKING([whether bops->revalidate_disk() exists]) + ZFS_LINUX_TEST_RESULT([block_device_operations_revalidate_disk], [ + AC_DEFINE([HAVE_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [1], + [Define if revalidate_disk() in block_device_operations]) + AC_MSG_RESULT(yes) + ],[ + AC_MSG_RESULT(no) + ]) +]) + AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS], [ ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID + ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK ]) AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS], [ ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID + ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK ]) diff --git a/include/os/linux/kernel/linux/blkdev_compat.h b/include/os/linux/kernel/linux/blkdev_compat.h index fe809176f..14cae3563 100644 --- a/include/os/linux/kernel/linux/blkdev_compat.h +++ b/include/os/linux/kernel/linux/blkdev_compat.h @@ -277,18 +277,22 @@ bio_set_bi_error(struct bio *bio, int error) static inline int zfs_check_media_change(struct block_device *bdev) { +#ifdef HAVE_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK struct gendisk *gd = bdev->bd_disk; const struct block_device_operations *bdo = gd->fops; +#endif if (!bdev_check_media_change(bdev)) return (0); +#ifdef HAVE_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK /* * Force revalidation, to mimic the old behavior of * check_disk_change() */ if (bdo->revalidate_disk) bdo->revalidate_disk(gd); +#endif return (0); } diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c index 7756d819f..741979f11 100644 --- a/module/os/linux/zfs/zvol_os.c +++ b/module/os/linux/zfs/zvol_os.c @@ -756,7 +756,9 @@ static struct block_device_operations zvol_ops = { .ioctl = zvol_ioctl, .compat_ioctl = zvol_compat_ioctl, .check_events = zvol_check_events, +#ifdef HAVE_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK .revalidate_disk = zvol_revalidate_disk, +#endif .getgeo = zvol_getgeo, .owner = THIS_MODULE, #ifdef HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS |