diff options
author | Brian Behlendorf <[email protected]> | 2020-12-22 10:26:45 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2020-12-27 16:20:08 -0800 |
commit | b7281c88bcbba0525e8b55607145956320d103f0 (patch) | |
tree | 981a8babaef6cf441860442bf7baf04c425a890c /config | |
parent | c347fac5861e9ed736441644a97b5fa5b446998d (diff) |
Linux 5.11 compat: lookup_bdev()
The lookup_bdev() function has been updated to require a dev_t
be passed as the second argument. This is actually pretty nice
since the major number stored in the dev_t was the only part we
were interested in. This allows to us avoid handling the bdev
entirely. The vdev_lookup_bdev() wrapper was updated to emulate
the behavior of the new lookup_bdev() for all supported kernels.
Reviewed-by: Rafael Kitover <[email protected]>
Reviewed-by: Coleman Kane <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #11387
Closes #11390
Diffstat (limited to 'config')
-rw-r--r-- | config/kernel-blkdev.m4 | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/config/kernel-blkdev.m4 b/config/kernel-blkdev.m4 index 530b49f48..622a1af5d 100644 --- a/config/kernel-blkdev.m4 +++ b/config/kernel-blkdev.m4 @@ -154,42 +154,69 @@ AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [ ]) dnl # -dnl # 2.6.27, lookup_bdev() was exported. -dnl # 4.4.0-6.21 - lookup_bdev() takes 2 arguments. +dnl # 5.11 API, lookup_bdev() takes dev_t argument. +dnl # 2.6.27 API, lookup_bdev() was first exported. +dnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument. dnl # AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [ + ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [ + #include <linux/blkdev.h> + ], [ + int error __attribute__ ((unused)); + const char path[] = "/example/path"; + dev_t dev; + + error = lookup_bdev(path, &dev); + ]) + ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [ #include <linux/fs.h> #include <linux/blkdev.h> ], [ - lookup_bdev(NULL); + struct block_device *bdev __attribute__ ((unused)); + const char path[] = "/example/path"; + + bdev = lookup_bdev(path); ]) - ZFS_LINUX_TEST_SRC([lookup_bdev_2args], [ + ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [ #include <linux/fs.h> ], [ - lookup_bdev(NULL, FMODE_READ); + struct block_device *bdev __attribute__ ((unused)); + const char path[] = "/example/path"; + + bdev = lookup_bdev(path, FMODE_READ); ]) ]) AC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [ - AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) - ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], + AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg]) + ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt], [lookup_bdev], [fs/block_dev.c], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, - [lookup_bdev() wants 1 arg]) + AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1, + [lookup_bdev() wants dev_t arg]) ], [ AC_MSG_RESULT(no) - AC_MSG_CHECKING([whether lookup_bdev() wants 2 args]) - ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_2args], + AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) + ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], [lookup_bdev], [fs/block_dev.c], [ AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_2ARGS_LOOKUP_BDEV, 1, - [lookup_bdev() wants 2 args]) + AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, + [lookup_bdev() wants 1 arg]) ], [ - ZFS_LINUX_TEST_ERROR([lookup_bdev()]) + AC_MSG_RESULT(no) + + AC_MSG_CHECKING([whether lookup_bdev() wants mode arg]) + ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode], + [lookup_bdev], [fs/block_dev.c], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1, + [lookup_bdev() wants mode arg]) + ], [ + ZFS_LINUX_TEST_ERROR([lookup_bdev()]) + ]) ]) ]) ]) |