Linux 5.12 compat: replace bio_*_io_acct with disk_*_io_acct
The bio_*_acct functions became GPL exports, which causes the kernel modules to refuse to compile. This replaces code with alternate function calls to the disk_*_io_acct interfaces, which are not GPL exports. This change was added in kernel commit 99dfc43ecbf67f12a06512918aaba61d55863efc. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Coleman Kane <ckane@colemankane.org> Closes #11639
This commit is contained in:
parent
d939930fcc
commit
778fa36ee7
|
@ -2,6 +2,17 @@ dnl #
|
||||||
dnl # Check for generic io accounting interface.
|
dnl # Check for generic io accounting interface.
|
||||||
dnl #
|
dnl #
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [
|
||||||
|
ZFS_LINUX_TEST_SRC([disk_io_acct], [
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
], [
|
||||||
|
struct gendisk *disk = NULL;
|
||||||
|
struct bio *bio = NULL;
|
||||||
|
unsigned long start_time;
|
||||||
|
|
||||||
|
start_time = disk_start_io_acct(disk, bio_sectors(bio), bio_op(bio));
|
||||||
|
disk_end_io_acct(disk, bio_op(bio), start_time);
|
||||||
|
])
|
||||||
|
|
||||||
ZFS_LINUX_TEST_SRC([bio_io_acct], [
|
ZFS_LINUX_TEST_SRC([bio_io_acct], [
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
], [
|
], [
|
||||||
|
@ -38,6 +49,19 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [
|
AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [
|
||||||
|
dnl #
|
||||||
|
dnl # 5.12 API,
|
||||||
|
dnl #
|
||||||
|
dnl # bio_start_io_acct() and bio_end_io_acct() became GPL-exported
|
||||||
|
dnl # so use disk_start_io_acct() and disk_end_io_acct() instead
|
||||||
|
dnl #
|
||||||
|
AC_MSG_CHECKING([whether generic disk_*_io_acct() are available])
|
||||||
|
ZFS_LINUX_TEST_RESULT([disk_io_acct], [
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available])
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
dnl #
|
dnl #
|
||||||
dnl # 5.7 API,
|
dnl # 5.7 API,
|
||||||
dnl #
|
dnl #
|
||||||
|
@ -85,3 +109,4 @@ AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
])
|
||||||
|
|
|
@ -520,7 +520,9 @@ blk_generic_start_io_acct(struct request_queue *q __attribute__((unused)),
|
||||||
struct gendisk *disk __attribute__((unused)),
|
struct gendisk *disk __attribute__((unused)),
|
||||||
int rw __attribute__((unused)), struct bio *bio)
|
int rw __attribute__((unused)), struct bio *bio)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_BIO_IO_ACCT)
|
#if defined(HAVE_DISK_IO_ACCT)
|
||||||
|
return (disk_start_io_acct(disk, bio_sectors(bio), bio_op(bio)));
|
||||||
|
#elif defined(HAVE_BIO_IO_ACCT)
|
||||||
return (bio_start_io_acct(bio));
|
return (bio_start_io_acct(bio));
|
||||||
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||||
unsigned long start_time = jiffies;
|
unsigned long start_time = jiffies;
|
||||||
|
@ -541,7 +543,9 @@ blk_generic_end_io_acct(struct request_queue *q __attribute__((unused)),
|
||||||
struct gendisk *disk __attribute__((unused)),
|
struct gendisk *disk __attribute__((unused)),
|
||||||
int rw __attribute__((unused)), struct bio *bio, unsigned long start_time)
|
int rw __attribute__((unused)), struct bio *bio, unsigned long start_time)
|
||||||
{
|
{
|
||||||
#if defined(HAVE_BIO_IO_ACCT)
|
#if defined(HAVE_DISK_IO_ACCT)
|
||||||
|
disk_end_io_acct(disk, bio_op(bio), start_time);
|
||||||
|
#elif defined(HAVE_BIO_IO_ACCT)
|
||||||
bio_end_io_acct(bio, start_time);
|
bio_end_io_acct(bio, start_time);
|
||||||
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
#elif defined(HAVE_GENERIC_IO_ACCT_3ARG)
|
||||||
generic_end_io_acct(rw, &disk->part0, start_time);
|
generic_end_io_acct(rw, &disk->part0, start_time);
|
||||||
|
|
Loading…
Reference in New Issue