]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Linux 4.16 compat: get_disk_and_module()
authorGiuseppe Di Natale <dinatale2@users.noreply.github.com>
Mon, 5 Mar 2018 20:44:35 +0000 (12:44 -0800)
committerTony Hutter <hutter2@llnl.gov>
Wed, 14 Mar 2018 23:10:38 +0000 (16:10 -0700)
As of https://github.com/torvalds/linux/commit/fb6d47a, get_disk()
is now get_disk_and_module(). Add a configure check to determine
if we need to use get_disk_and_module().

Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Closes #7264

config/kernel-get-disk-and-module.m4 [new file with mode: 0644]
config/kernel.m4
include/linux/blkdev_compat.h
module/zfs/zvol.c

diff --git a/config/kernel-get-disk-and-module.m4 b/config/kernel-get-disk-and-module.m4
new file mode 100644 (file)
index 0000000..2a51a5a
--- /dev/null
@@ -0,0 +1,19 @@
+dnl #
+dnl # 4.16 API change
+dnl # Verify if get_disk_and_module() symbol is available.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_GET_DISK_AND_MODULE],
+       [AC_MSG_CHECKING([whether get_disk_and_module() is available])
+       ZFS_LINUX_TRY_COMPILE_SYMBOL([
+               #include <linux/genhd.h>
+       ], [
+               struct gendisk *disk = NULL;
+               (void) get_disk_and_module(disk);
+       ], [get_disk_and_module], [block/genhd.c], [
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_GET_DISK_AND_MODULE,
+                   1, [get_disk_and_module() is available])
+       ], [
+               AC_MSG_RESULT(no)
+       ])
+])
index 3e499e447dbafd685f620cb7220ef8ff49128517..419ed1a2c76f9c74e4b37cb3838897b6f365fbcd 100644 (file)
@@ -40,6 +40,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
        ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BIO_RW_UNPLUG
        ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BLK_PLUG
+       ZFS_AC_KERNEL_GET_DISK_AND_MODULE
        ZFS_AC_KERNEL_GET_DISK_RO
        ZFS_AC_KERNEL_GET_GENDISK
        ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS
index c8a8e856dee533c21233a8ebb31cd2741ff31106..4406493e4caa11113e8c92fcf1624c9987010bb8 100644 (file)
@@ -139,6 +139,14 @@ blk_queue_set_read_ahead(struct request_queue *q, unsigned long ra_pages)
 #endif
 }
 
+#ifndef HAVE_GET_DISK_AND_MODULE
+static inline struct kobject *
+get_disk_and_module(struct gendisk *disk)
+{
+       return (get_disk(disk));
+}
+#endif
+
 #ifndef HAVE_GET_DISK_RO
 static inline int
 get_disk_ro(struct gendisk *disk)
index aac4942098ad6e6bf2b461ffd084029e2cea194b..62176e1cfbbcb8cee27627c9ce966436537feb88 100644 (file)
@@ -1559,7 +1559,7 @@ zvol_probe(dev_t dev, int *part, void *arg)
        struct kobject *kobj;
 
        zv = zvol_find_by_dev(dev);
-       kobj = zv ? get_disk(zv->zv_disk) : NULL;
+       kobj = zv ? get_disk_and_module(zv->zv_disk) : NULL;
        ASSERT(zv == NULL || MUTEX_HELD(&zv->zv_state_lock));
        if (zv)
                mutex_exit(&zv->zv_state_lock);