]> git.proxmox.com Git - mirror_zfs.git/blobdiff - config/kernel-block-device-operations.m4
FreeBSD: Add zfs_link_create() error handling
[mirror_zfs.git] / config / kernel-block-device-operations.m4
index 84e39dc8a2f63b9cf173d5951f22dea96cd648ef..4ff20b9c413df01aa72ed6d9cbc5da978ad942df 100644 (file)
@@ -5,7 +5,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS], [
        ZFS_LINUX_TEST_SRC([block_device_operations_check_events], [
                #include <linux/blkdev.h>
 
-               unsigned int blk_check_events(struct gendisk *disk,
+               static unsigned int blk_check_events(struct gendisk *disk,
                    unsigned int clearing) {
                        (void) disk, (void) clearing;
                        return (0);
@@ -34,7 +34,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [
        ZFS_LINUX_TEST_SRC([block_device_operations_release_void], [
                #include <linux/blkdev.h>
 
-               void blk_release(struct gendisk *g, fmode_t mode) {
+               static void blk_release(struct gendisk *g, fmode_t mode) {
                        (void) g, (void) mode;
                        return;
                }
@@ -49,12 +49,42 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [
        ], [], [])
 ])
 
+dnl #
+dnl # 5.9.x API change
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_1ARG], [
+       ZFS_LINUX_TEST_SRC([block_device_operations_release_void_1arg], [
+               #include <linux/blkdev.h>
+
+               static void blk_release(struct gendisk *g) {
+                       (void) g;
+                       return;
+               }
+
+               static const struct block_device_operations
+                   bops __attribute__ ((unused)) = {
+                       .open           = NULL,
+                       .release        = blk_release,
+                       .ioctl          = NULL,
+                       .compat_ioctl   = NULL,
+               };
+       ], [], [])
+])
+
 AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID], [
-       AC_MSG_CHECKING([whether bops->release() is void])
+       AC_MSG_CHECKING([whether bops->release() is void and takes 2 args])
        ZFS_LINUX_TEST_RESULT([block_device_operations_release_void], [
                AC_MSG_RESULT(yes)
        ],[
-               ZFS_LINUX_TEST_ERROR([bops->release()])
+               AC_MSG_RESULT(no)
+               AC_MSG_CHECKING([whether bops->release() is void and takes 1 arg])
+               ZFS_LINUX_TEST_RESULT([block_device_operations_release_void_1arg], [
+                       AC_MSG_RESULT(yes)
+                       AC_DEFINE([HAVE_BLOCK_DEVICE_OPERATIONS_RELEASE_1ARG], [1],
+                               [Define if release() in block_device_operations takes 1 arg])
+               ],[
+                       ZFS_LINUX_TEST_ERROR([bops->release()])
+               ])
        ])
 ])
 
@@ -66,7 +96,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [
        ZFS_LINUX_TEST_SRC([block_device_operations_revalidate_disk], [
                #include <linux/blkdev.h>
 
-               int blk_revalidate_disk(struct gendisk *disk) {
+               static int blk_revalidate_disk(struct gendisk *disk) {
                        (void) disk;
                        return(0);
                }
@@ -92,6 +122,7 @@ AC_DEFUN([ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK], [
 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS], [
        ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_CHECK_EVENTS
        ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_VOID
+       ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_RELEASE_1ARG
        ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS_REVALIDATE_DISK
 ])