Linux 4.16 compat: get_disk_and_module()
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
This commit is contained in:
parent
80d52c3919
commit
dd3e1e3083
|
@ -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)
|
||||||
|
])
|
||||||
|
])
|
|
@ -40,6 +40,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||||
ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
|
ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS
|
||||||
ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BIO_RW_UNPLUG
|
ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BIO_RW_UNPLUG
|
||||||
ZFS_AC_KERNEL_BLK_QUEUE_HAVE_BLK_PLUG
|
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_DISK_RO
|
||||||
ZFS_AC_KERNEL_GET_GENDISK
|
ZFS_AC_KERNEL_GET_GENDISK
|
||||||
ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS
|
ZFS_AC_KERNEL_HAVE_BIO_SET_OP_ATTRS
|
||||||
|
|
|
@ -139,6 +139,14 @@ blk_queue_set_read_ahead(struct request_queue *q, unsigned long ra_pages)
|
||||||
#endif
|
#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
|
#ifndef HAVE_GET_DISK_RO
|
||||||
static inline int
|
static inline int
|
||||||
get_disk_ro(struct gendisk *disk)
|
get_disk_ro(struct gendisk *disk)
|
||||||
|
|
|
@ -1589,7 +1589,7 @@ zvol_probe(dev_t dev, int *part, void *arg)
|
||||||
struct kobject *kobj;
|
struct kobject *kobj;
|
||||||
|
|
||||||
zv = zvol_find_by_dev(dev);
|
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));
|
ASSERT(zv == NULL || MUTEX_HELD(&zv->zv_state_lock));
|
||||||
if (zv)
|
if (zv)
|
||||||
mutex_exit(&zv->zv_state_lock);
|
mutex_exit(&zv->zv_state_lock);
|
||||||
|
|
Loading…
Reference in New Issue