Subject: [Saphira] Linux 7.3: bvec bi_bvec_done renamed bi_offset Upstream robn/zfs@79fc679547d6, carried verbatim except the blkdev_compat.h hunk, which is rebased to 2.4.4 context (zero offset). The kernel-bio.m4 autoconf hunks apply exactly as upstream wrote them. diff --git a/config/kernel-bio.m4 b/config/kernel-bio.m4 index 099b11effa13..305d3ccd6fe3 100644 --- a/config/kernel-bio.m4 +++ b/config/kernel-bio.m4 @@ -234,6 +234,30 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO_ALLOC_4ARG], [ ]) ]) +dnl # +dnl # Linux 7.3 API +dnl # +dnl # bi_iter.bi_bvec_done renamed to bi_iter.bi_offset +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_BVEC_ITER_OFFSET], [ + ZFS_LINUX_TEST_SRC([bvec_iter_offset], [ + #include + ],[ + struct bvec_iter *bi = NULL; + unsigned int __attribute__((unused)) offset = bi->bi_offset; + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_BVEC_ITER_OFFSET], [ + AC_MSG_CHECKING([if bvec_iter has bi_offset]) + ZFS_LINUX_TEST_RESULT([bvec_iter_offset],[ + AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_BVEC_ITER_OFFSET], 1, [bvec_iter has bi_offset]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [ ZFS_AC_KERNEL_SRC_BIO_OPS ZFS_AC_KERNEL_SRC_BIO_SET_DEV @@ -243,6 +267,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [ ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG + ZFS_AC_KERNEL_SRC_BVEC_ITER_OFFSET ]) AC_DEFUN([ZFS_AC_KERNEL_BIO], [ @@ -253,4 +278,5 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO], [ ZFS_AC_KERNEL_BIO_BDEV_DISK ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID ZFS_AC_KERNEL_BIO_ALLOC_4ARG + ZFS_AC_KERNEL_BVEC_ITER_OFFSET ]) --- a/include/os/linux/kernel/linux/blkdev_compat.h +++ b/include/os/linux/kernel/linux/blkdev_compat.h @@ -104,7 +104,11 @@ #define BIO_BI_SECTOR(bio) (bio)->bi_iter.bi_sector #define BIO_BI_SIZE(bio) (bio)->bi_iter.bi_size #define BIO_BI_IDX(bio) (bio)->bi_iter.bi_idx +#ifdef HAVE_BVEC_ITER_OFFSET +#define BIO_BI_SKIP(bio) (bio)->bi_iter.bi_offset +#else #define BIO_BI_SKIP(bio) (bio)->bi_iter.bi_bvec_done +#endif #define bio_for_each_segment4(bv, bvp, b, i) \ bio_for_each_segment((bv), (b), (i)) typedef struct bvec_iter bvec_iterator_t;