Eliminate runtime function pointer mods in autotools checks
[zfs.git] / config / kernel-bdev-block-device-operations.m4
index 28c3032..8b5e0a3 100644 (file)
@@ -7,24 +7,23 @@ AC_DEFUN([ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS], [
        EXTRA_KCFLAGS="${NO_UNUSED_BUT_SET_VARIABLE}"
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/blkdev.h>
-       ],[
-               int (*blk_open) (struct block_device *, fmode_t) = NULL;
-               int (*blk_release) (struct gendisk *, fmode_t) = NULL;
-               int (*blk_ioctl) (struct block_device *, fmode_t,
-                                 unsigned, unsigned long) = NULL;
-               int (*blk_compat_ioctl) (struct block_device *, fmode_t,
-                                         unsigned, unsigned long) = NULL;
-               struct block_device_operations blk_ops = {
+
+               int blk_open(struct block_device *bdev, fmode_t mode)
+                   { return 0; }
+               int blk_release(struct gendisk *g, fmode_t mode) { return 0; }
+               int blk_ioctl(struct block_device *bdev, fmode_t mode,
+                   unsigned x, unsigned long y) { return 0; }
+               int blk_compat_ioctl(struct block_device * bdev, fmode_t mode,
+                   unsigned x, unsigned long y) { return 0; }
+
+               static const struct block_device_operations
+                   bops __attribute__ ((unused)) = {
                        .open           = blk_open,
                        .release        = blk_release,
                        .ioctl          = blk_ioctl,
                        .compat_ioctl   = blk_compat_ioctl,
                };
-               
-               blk_ops.open(NULL, 0);
-               blk_ops.release(NULL, 0);
-               blk_ops.ioctl(NULL, 0, 0, 0);
-               blk_ops.compat_ioctl(NULL, 0, 0, 0);
+       ],[
        ],[
                AC_MSG_RESULT(struct block_device)
                AC_DEFINE(HAVE_BDEV_BLOCK_DEVICE_OPERATIONS, 1,