]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Linux 6.6 compat: fsync_bdev() has been removed in favor of sync_blockdev()
authorColeman Kane <ckane@colemankane.org>
Fri, 15 Sep 2023 05:07:03 +0000 (01:07 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Sep 2023 01:38:40 +0000 (18:38 -0700)
In Linux commit 560e20e4bf6484a0c12f9f3c7a1aa55056948e1e, the
fsync_bdev() function was removed in favor of sync_blockdev() to do
(roughly) the same thing, given the same input. This change
conditionally attempts to call sync_blockdev() if fsync_bdev() isn't
discovered during configure.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Coleman Kane <ckane@colemankane.org>
Closes #15263

config/kernel-fsync-bdev.m4 [new file with mode: 0644]
config/kernel.m4
module/os/linux/zfs/zvol_os.c

diff --git a/config/kernel-fsync-bdev.m4 b/config/kernel-fsync-bdev.m4
new file mode 100644 (file)
index 0000000..c47e236
--- /dev/null
@@ -0,0 +1,36 @@
+dnl #
+dnl # 6.6 API change,
+dnl # fsync_bdev was removed in favor of sync_blockdev
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_SYNC_BDEV], [
+       ZFS_LINUX_TEST_SRC([fsync_bdev], [
+               #include <linux/blkdev.h>
+       ],[
+               fsync_bdev(NULL);
+       ])
+
+       ZFS_LINUX_TEST_SRC([sync_blockdev], [
+               #include <linux/blkdev.h>
+       ],[
+               sync_blockdev(NULL);
+       ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_SYNC_BDEV], [
+       AC_MSG_CHECKING([whether fsync_bdev() exists])
+       ZFS_LINUX_TEST_RESULT([fsync_bdev], [
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_FSYNC_BDEV, 1,
+                   [fsync_bdev() is declared in include/blkdev.h])
+       ],[
+               AC_MSG_CHECKING([whether sync_blockdev() exists])
+               ZFS_LINUX_TEST_RESULT([sync_blockdev], [
+                       AC_MSG_RESULT(yes)
+                       AC_DEFINE(HAVE_SYNC_BLOCKDEV, 1,
+                           [sync_blockdev() is declared in include/blkdev.h])
+               ],[
+                       ZFS_LINUX_TEST_ERROR(
+                           [neither fsync_bdev() nor sync_blockdev() exist])
+               ])
+       ])
+])
index df194ec72207351821dc2e72b8f9b14458e760a4..056517a841f286e22097f97edc9318989f8e3503 100644 (file)
@@ -162,6 +162,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
        ZFS_AC_KERNEL_SRC_RECLAIMED
        ZFS_AC_KERNEL_SRC_REGISTER_SYSCTL_TABLE
        ZFS_AC_KERNEL_SRC_COPY_SPLICE_READ
+       ZFS_AC_KERNEL_SRC_SYNC_BDEV
        case "$host_cpu" in
                powerpc*)
                        ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
@@ -303,6 +304,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
        ZFS_AC_KERNEL_RECLAIMED
        ZFS_AC_KERNEL_REGISTER_SYSCTL_TABLE
        ZFS_AC_KERNEL_COPY_SPLICE_READ
+       ZFS_AC_KERNEL_SYNC_BDEV
        case "$host_cpu" in
                powerpc*)
                        ZFS_AC_KERNEL_CPU_HAS_FEATURE
index 7a95b54bdf0d010b9c3a550093a847bd4fafeee4..f94ce69fb9e28e8d81a060477e9ce2acfe211f28 100644 (file)
@@ -873,7 +873,13 @@ zvol_ioctl(struct block_device *bdev, fmode_t mode,
 
        switch (cmd) {
        case BLKFLSBUF:
+#ifdef HAVE_FSYNC_BDEV
                fsync_bdev(bdev);
+#elif defined(HAVE_SYNC_BLOCKDEV)
+               sync_blockdev(bdev);
+#else
+#error "Neither fsync_bdev() nor sync_blockdev() found"
+#endif
                invalidate_bdev(bdev);
                rw_enter(&zv->zv_suspend_lock, RW_READER);