diff options
author | Brian Behlendorf <[email protected]> | 2018-06-15 15:05:21 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2018-06-15 15:05:21 -0700 |
commit | 7b98f0d91f09df90218322df5cf1b8ba7928972e (patch) | |
tree | df6795e04215f48408f6f0a36c7fdf946b6b9a97 /config | |
parent | 29445fe3a03d58d5aa725bd6c8964df8c8081385 (diff) |
Linux compat 4.18: check_disk_size_change()
Added support for the bops->check_events() interface which was
added in the 2.6.38 kernel to replace bops->media_changed().
Fully implementing this functionality allows the volume resize
code to rely on revalidate_disk(), which is the preferred
mechanism, and removes the need to use check_disk_size_change().
In order for bops->check_events() to lookup the zvol_state_t
stored in the disk->private_data the zvol_state_lock needs to
be held. Since the check events interface may poll the mutex
has been converted to a rwlock for better concurrently. The
rwlock need only be taken as a writer in the zvol_free() path
when disk->private_data is set to NULL.
The configure checks for the block_device_operations structure
were consolidated in a single kernel-block-device-operations.m4
file.
The ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS configure checks
and assoicated dead code was removed. This interface was added
to the 2.6.28 kernel which predates the oldest supported 2.6.32
kernel and will therefore always be available.
Updated maximum Linux version in META file. The 4.17 kernel
was released on 2018-06-03 and ZoL is compatible with the
finalized kernel.
Reviewed-by: Boris Protopopov <[email protected]>
Reviewed-by: Sara Hartse <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #7611
Diffstat (limited to 'config')
-rw-r--r-- | config/kernel-bdev-block-device-operations.m4 | 34 | ||||
-rw-r--r-- | config/kernel-block-device-operations-release-void.m4 | 29 | ||||
-rw-r--r-- | config/kernel-block-device-operations.m4 | 57 | ||||
-rw-r--r-- | config/kernel.m4 | 2 |
4 files changed, 58 insertions, 64 deletions
diff --git a/config/kernel-bdev-block-device-operations.m4 b/config/kernel-bdev-block-device-operations.m4 deleted file mode 100644 index faacc195d..000000000 --- a/config/kernel-bdev-block-device-operations.m4 +++ /dev/null @@ -1,34 +0,0 @@ -dnl # -dnl # 2.6.x API change -dnl # -AC_DEFUN([ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS], [ - AC_MSG_CHECKING([block device operation prototypes]) - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" - ZFS_LINUX_TRY_COMPILE([ - #include <linux/blkdev.h> - - int blk_open(struct block_device *bdev, fmode_t mode) - { return 0; } - int blk_ioctl(struct block_device *bdev, fmode_t mode, - unsigned x, unsigned long y) { return 0; } - int blk_compat_ioctl(struct block_device * bdev, fmode_t mode, - unsigned x, unsigned long y) { return 0; } - - static const struct block_device_operations - bops __attribute__ ((unused)) = { - .open = blk_open, - .release = NULL, - .ioctl = blk_ioctl, - .compat_ioctl = blk_compat_ioctl, - }; - ],[ - ],[ - AC_MSG_RESULT(struct block_device) - AC_DEFINE(HAVE_BDEV_BLOCK_DEVICE_OPERATIONS, 1, - [struct block_device_operations use bdevs]) - ],[ - AC_MSG_RESULT(struct inode) - ]) - EXTRA_KCFLAGS="$tmp_flags" -]) diff --git a/config/kernel-block-device-operations-release-void.m4 b/config/kernel-block-device-operations-release-void.m4 deleted file mode 100644 index a73f85872..000000000 --- a/config/kernel-block-device-operations-release-void.m4 +++ /dev/null @@ -1,29 +0,0 @@ -dnl # -dnl # 3.10.x API change -dnl # -AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [ - AC_MSG_CHECKING([whether block_device_operations.release is void]) - tmp_flags="$EXTRA_KCFLAGS" - EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" - ZFS_LINUX_TRY_COMPILE([ - #include <linux/blkdev.h> - - void blk_release(struct gendisk *g, fmode_t mode) { return; } - - static const struct block_device_operations - bops __attribute__ ((unused)) = { - .open = NULL, - .release = blk_release, - .ioctl = NULL, - .compat_ioctl = NULL, - }; - ],[ - ],[ - AC_MSG_RESULT(void) - AC_DEFINE(HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID, 1, - [struct block_device_operations.release returns void]) - ],[ - AC_MSG_RESULT(int) - ]) - EXTRA_KCFLAGS="$tmp_flags" -]) diff --git a/config/kernel-block-device-operations.m4 b/config/kernel-block-device-operations.m4 new file mode 100644 index 000000000..5f2811c15 --- /dev/null +++ b/config/kernel-block-device-operations.m4 @@ -0,0 +1,57 @@ +dnl # +dnl # 2.6.38 API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS], [ + AC_MSG_CHECKING([whether bops->check_events() exists]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include <linux/blkdev.h> + + unsigned int blk_check_events(struct gendisk *disk, + unsigned int clearing) { return (0); } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .check_events = blk_check_events, + }; + ],[ + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS, 1, + [bops->check_events() exists]) + ],[ + AC_MSG_RESULT(no) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) + +dnl # +dnl # 3.10.x API change +dnl # +AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [ + AC_MSG_CHECKING([whether bops->release() is void]) + tmp_flags="$EXTRA_KCFLAGS" + EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}" + ZFS_LINUX_TRY_COMPILE([ + #include <linux/blkdev.h> + + void blk_release(struct gendisk *g, fmode_t mode) { return; } + + static const struct block_device_operations + bops __attribute__ ((unused)) = { + .open = NULL, + .release = blk_release, + .ioctl = NULL, + .compat_ioctl = NULL, + }; + ],[ + ],[ + AC_MSG_RESULT(void) + AC_DEFINE(HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID, 1, + [bops->release() returns void]) + ],[ + AC_MSG_RESULT(int) + ]) + EXTRA_KCFLAGS="$tmp_flags" +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index 8151cdc22..d5b69d682 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -40,7 +40,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_CURRENT_BIO_TAIL ZFS_AC_KERNEL_SUPER_USER_NS ZFS_AC_KERNEL_SUBMIT_BIO - ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS + ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID ZFS_AC_KERNEL_TYPE_FMODE_T ZFS_AC_KERNEL_3ARG_BLKDEV_GET |