linux 6.3 compat: add another bdev_io_acct case

Linux 6.3+, and backports from it (6.2.8+), changed the
signatures on bdev_io_{start,end}_acct.  Add a case for it.  

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes #14658
Closes #14668
This commit is contained in:
Rich Ercolani 2023-03-27 14:29:19 -04:00 committed by Brian Behlendorf
parent aa7258ced0
commit 59f1875639
2 changed files with 69 additions and 39 deletions

View File

@ -2,7 +2,20 @@ 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([bdev_io_acct], [ ZFS_LINUX_TEST_SRC([bdev_io_acct_63], [
#include <linux/blkdev.h>
], [
struct block_device *bdev = NULL;
struct bio *bio = NULL;
unsigned long passed_time = 0;
unsigned long start_time;
start_time = bdev_start_io_acct(bdev, bio_op(bio),
passed_time);
bdev_end_io_acct(bdev, bio_op(bio), bio_sectors(bio), start_time);
])
ZFS_LINUX_TEST_SRC([bdev_io_acct_old], [
#include <linux/blkdev.h> #include <linux/blkdev.h>
], [ ], [
struct block_device *bdev = NULL; struct block_device *bdev = NULL;
@ -62,19 +75,29 @@ 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 # Linux 6.3, and then backports thereof, changed
dnl # the signatures on bdev_start_io_acct/bdev_end_io_acct
dnl #
AC_MSG_CHECKING([whether 6.3+ bdev_*_io_acct() are available])
ZFS_LINUX_TEST_RESULT([bdev_io_acct_63], [
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BDEV_IO_ACCT_63, 1, [bdev_*_io_acct() available])
], [
AC_MSG_RESULT(no)
dnl # dnl #
dnl # 5.19 API, dnl # 5.19 API,
dnl # dnl #
dnl # disk_start_io_acct() and disk_end_io_acct() have been replaced by dnl # disk_start_io_acct() and disk_end_io_acct() have been replaced by
dnl # bdev_start_io_acct() and bdev_end_io_acct(). dnl # bdev_start_io_acct() and bdev_end_io_acct().
dnl # dnl #
AC_MSG_CHECKING([whether generic bdev_*_io_acct() are available]) AC_MSG_CHECKING([whether pre-6.3 bdev_*_io_acct() are available])
ZFS_LINUX_TEST_RESULT([bdev_io_acct], [ ZFS_LINUX_TEST_RESULT([bdev_io_acct_old], [
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BDEV_IO_ACCT, 1, [bdev_*_io_acct() available]) AC_DEFINE(HAVE_BDEV_IO_ACCT_OLD, 1, [bdev_*_io_acct() available])
], [ ], [
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
dnl # dnl #
dnl # 5.12 API, dnl # 5.12 API,
dnl # dnl #
@ -137,3 +160,4 @@ AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [
]) ])
]) ])
]) ])
])

View File

@ -581,7 +581,10 @@ 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_BDEV_IO_ACCT) #if defined(HAVE_BDEV_IO_ACCT_63)
return (bdev_start_io_acct(bio->bi_bdev, bio_op(bio),
jiffies));
#elif defined(HAVE_BDEV_IO_ACCT_OLD)
return (bdev_start_io_acct(bio->bi_bdev, bio_sectors(bio), return (bdev_start_io_acct(bio->bi_bdev, bio_sectors(bio),
bio_op(bio), jiffies)); bio_op(bio), jiffies));
#elif defined(HAVE_DISK_IO_ACCT) #elif defined(HAVE_DISK_IO_ACCT)
@ -607,7 +610,10 @@ 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_BDEV_IO_ACCT) #if defined(HAVE_BDEV_IO_ACCT_63)
bdev_end_io_acct(bio->bi_bdev, bio_op(bio), bio_sectors(bio),
start_time);
#elif defined(HAVE_BDEV_IO_ACCT_OLD)
bdev_end_io_acct(bio->bi_bdev, bio_op(bio), start_time); bdev_end_io_acct(bio->bi_bdev, bio_op(bio), start_time);
#elif defined(HAVE_DISK_IO_ACCT) #elif defined(HAVE_DISK_IO_ACCT)
disk_end_io_acct(disk, bio_op(bio), start_time); disk_end_io_acct(disk, bio_op(bio), start_time);