From 4584ec11557606a78454709bc2e67cd8d237aea0 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Mon, 3 Apr 2023 11:48:06 +0200 Subject: [PATCH] cherry-pick e063ff177 ("linux 6.3 compat: add another bdev_io_acct case") As among possibly other things, it addresses a patch that got backported to kernel 6.2.8 too. Signed-off-by: Thomas Lamprecht --- ...compat-add-another-bdev_io_acct-case.patch | 195 ++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 196 insertions(+) create mode 100644 debian/patches/0012-linux-6.3-compat-add-another-bdev_io_acct-case.patch diff --git a/debian/patches/0012-linux-6.3-compat-add-another-bdev_io_acct-case.patch b/debian/patches/0012-linux-6.3-compat-add-another-bdev_io_acct-case.patch new file mode 100644 index 0000000..fde8569 --- /dev/null +++ b/debian/patches/0012-linux-6.3-compat-add-another-bdev_io_acct-case.patch @@ -0,0 +1,195 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Rich Ercolani <214141+rincebrain@users.noreply.github.com> +Date: Mon, 27 Mar 2023 14:29:19 -0400 +Subject: [PATCH] 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 +Signed-off-by: Rich Ercolani +Closes #14658 +Closes #14668 +(cherry picked from commit 59f187563937aa0d6c74a9854eb1cab6632866f9) +Signed-off-by: Thomas Lamprecht +--- + config/kernel-generic_io_acct.m4 | 98 ++++++++++++------- + include/os/linux/kernel/linux/blkdev_compat.h | 10 +- + 2 files changed, 69 insertions(+), 39 deletions(-) + +diff --git a/config/kernel-generic_io_acct.m4 b/config/kernel-generic_io_acct.m4 +index a8a448c6f..a6a109004 100644 +--- a/config/kernel-generic_io_acct.m4 ++++ b/config/kernel-generic_io_acct.m4 +@@ -2,7 +2,20 @@ dnl # + dnl # Check for generic io accounting interface. + dnl # + 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 ++ ], [ ++ 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 + ], [ + struct block_device *bdev = NULL; +@@ -63,74 +76,85 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [ + + AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [ + dnl # +- dnl # 5.19 API, ++ dnl # Linux 6.3, and then backports thereof, changed ++ dnl # the signatures on bdev_start_io_acct/bdev_end_io_acct + dnl # +- 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 # +- AC_MSG_CHECKING([whether generic bdev_*_io_acct() are available]) +- ZFS_LINUX_TEST_RESULT([bdev_io_acct], [ ++ 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, 1, [bdev_*_io_acct() available]) ++ AC_DEFINE(HAVE_BDEV_IO_ACCT_63, 1, [bdev_*_io_acct() available]) + ], [ + AC_MSG_RESULT(no) + + dnl # +- dnl # 5.12 API, ++ dnl # 5.19 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 # disk_start_io_acct() and disk_end_io_acct() have been replaced by ++ dnl # bdev_start_io_acct() and bdev_end_io_acct(). + dnl # +- AC_MSG_CHECKING([whether generic disk_*_io_acct() are available]) +- ZFS_LINUX_TEST_RESULT([disk_io_acct], [ ++ AC_MSG_CHECKING([whether pre-6.3 bdev_*_io_acct() are available]) ++ ZFS_LINUX_TEST_RESULT([bdev_io_acct_old], [ + AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available]) ++ AC_DEFINE(HAVE_BDEV_IO_ACCT_OLD, 1, [bdev_*_io_acct() available]) + ], [ + AC_MSG_RESULT(no) +- + dnl # +- dnl # 5.7 API, ++ dnl # 5.12 API, + dnl # +- dnl # Added bio_start_io_acct() and bio_end_io_acct() helpers. ++ 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 bio_*_io_acct() are available]) +- ZFS_LINUX_TEST_RESULT([bio_io_acct], [ ++ AC_MSG_CHECKING([whether generic disk_*_io_acct() are available]) ++ ZFS_LINUX_TEST_RESULT([disk_io_acct], [ + AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_BIO_IO_ACCT, 1, [bio_*_io_acct() available]) ++ AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available]) + ], [ + AC_MSG_RESULT(no) + + dnl # +- dnl # 4.14 API, ++ dnl # 5.7 API, + dnl # +- dnl # generic_start_io_acct/generic_end_io_acct now require +- dnl # request_queue to be provided. No functional changes, +- dnl # but preparation for inflight accounting. ++ dnl # Added bio_start_io_acct() and bio_end_io_acct() helpers. + dnl # +- AC_MSG_CHECKING([whether generic_*_io_acct wants 4 args]) +- ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_4args], +- [generic_start_io_acct], [block/bio.c], [ ++ AC_MSG_CHECKING([whether generic bio_*_io_acct() are available]) ++ ZFS_LINUX_TEST_RESULT([bio_io_acct], [ + AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1, +- [generic_*_io_acct() 4 arg available]) ++ AC_DEFINE(HAVE_BIO_IO_ACCT, 1, [bio_*_io_acct() available]) + ], [ + AC_MSG_RESULT(no) + + dnl # +- dnl # 3.19 API addition ++ dnl # 4.14 API, + dnl # +- dnl # torvalds/linux@394ffa50 allows us to increment +- dnl # iostat counters without generic_make_request(). ++ dnl # generic_start_io_acct/generic_end_io_acct now require ++ dnl # request_queue to be provided. No functional changes, ++ dnl # but preparation for inflight accounting. + dnl # +- AC_MSG_CHECKING( +- [whether generic_*_io_acct wants 3 args]) +- ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_3args], ++ AC_MSG_CHECKING([whether generic_*_io_acct wants 4 args]) ++ ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_4args], + [generic_start_io_acct], [block/bio.c], [ + AC_MSG_RESULT(yes) +- AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1, +- [generic_*_io_acct() 3 arg available]) ++ AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1, ++ [generic_*_io_acct() 4 arg available]) + ], [ + AC_MSG_RESULT(no) ++ ++ dnl # ++ dnl # 3.19 API addition ++ dnl # ++ dnl # torvalds/linux@394ffa50 allows us to increment ++ dnl # iostat counters without generic_make_request(). ++ dnl # ++ AC_MSG_CHECKING( ++ [whether generic_*_io_acct wants 3 args]) ++ ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_3args], ++ [generic_start_io_acct], [block/bio.c], [ ++ AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1, ++ [generic_*_io_acct() 3 arg available]) ++ ], [ ++ AC_MSG_RESULT(no) ++ ]) + ]) + ]) + ]) +diff --git a/include/os/linux/kernel/linux/blkdev_compat.h b/include/os/linux/kernel/linux/blkdev_compat.h +index bac5c2279..3a3f264d7 100644 +--- a/include/os/linux/kernel/linux/blkdev_compat.h ++++ b/include/os/linux/kernel/linux/blkdev_compat.h +@@ -555,7 +555,10 @@ blk_generic_start_io_acct(struct request_queue *q __attribute__((unused)), + struct gendisk *disk __attribute__((unused)), + 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), + bio_op(bio), jiffies)); + #elif defined(HAVE_DISK_IO_ACCT) +@@ -581,7 +584,10 @@ blk_generic_end_io_acct(struct request_queue *q __attribute__((unused)), + struct gendisk *disk __attribute__((unused)), + 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); + #elif defined(HAVE_DISK_IO_ACCT) + disk_end_io_acct(disk, bio_op(bio), start_time); diff --git a/debian/patches/series b/debian/patches/series index d2770d3..aed00d7 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -9,3 +9,4 @@ 0009-Patch-move-manpage-arcstat-1-to-arcstat-8.patch 0010-arcstat-Fix-integer-division-with-python3.patch 0011-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch +0012-linux-6.3-compat-add-another-bdev_io_acct-case.patch