xref: /freebsd-src/sys/contrib/openzfs/config/kernel-make-request-fn.m4 (revision 7a7741af18d6c8a804cc643cb7ecda9d730c6aa6)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # Check for make_request_fn interface.
3eda14cbcSMatt Macydnl #
4eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN], [
5eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([make_request_fn_blk_qc_t], [
6eda14cbcSMatt Macy		#include <linux/blkdev.h>
7fd45b686SMartin Matuska		static blk_qc_t make_request(struct request_queue *q,
8eda14cbcSMatt Macy		    struct bio *bio) { return (BLK_QC_T_NONE); }
9eda14cbcSMatt Macy	],[
10eda14cbcSMatt Macy		blk_queue_make_request(NULL, &make_request);
11eda14cbcSMatt Macy	])
12eda14cbcSMatt Macy
13eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blk_alloc_queue_request_fn], [
14eda14cbcSMatt Macy		#include <linux/blkdev.h>
15fd45b686SMartin Matuska		static blk_qc_t make_request(struct request_queue *q,
16eda14cbcSMatt Macy		    struct bio *bio) { return (BLK_QC_T_NONE); }
17eda14cbcSMatt Macy	],[
18eda14cbcSMatt Macy		struct request_queue *q __attribute__ ((unused));
19eda14cbcSMatt Macy		q = blk_alloc_queue(make_request, NUMA_NO_NODE);
20eda14cbcSMatt Macy	])
21eda14cbcSMatt Macy
227877fdebSMatt Macy	ZFS_LINUX_TEST_SRC([blk_alloc_queue_request_fn_rh], [
237877fdebSMatt Macy		#include <linux/blkdev.h>
24fd45b686SMartin Matuska		static blk_qc_t make_request(struct request_queue *q,
257877fdebSMatt Macy		    struct bio *bio) { return (BLK_QC_T_NONE); }
267877fdebSMatt Macy	],[
277877fdebSMatt Macy		struct request_queue *q __attribute__ ((unused));
287877fdebSMatt Macy		q = blk_alloc_queue_rh(make_request, NUMA_NO_NODE);
297877fdebSMatt Macy	])
307877fdebSMatt Macy
31eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([block_device_operations_submit_bio], [
32eda14cbcSMatt Macy		#include <linux/blkdev.h>
33eda14cbcSMatt Macy	],[
34eda14cbcSMatt Macy		struct block_device_operations o;
35eda14cbcSMatt Macy		o.submit_bio = NULL;
36eda14cbcSMatt Macy	])
371f88aa09SMartin Matuska
381f88aa09SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_alloc_disk], [
391f88aa09SMartin Matuska		#include <linux/blkdev.h>
401f88aa09SMartin Matuska	],[
411f88aa09SMartin Matuska		struct gendisk *disk  __attribute__ ((unused));
421f88aa09SMartin Matuska		disk = blk_alloc_disk(NUMA_NO_NODE);
431f88aa09SMartin Matuska	])
44271171e0SMartin Matuska
451719886fSMartin Matuska	ZFS_LINUX_TEST_SRC([blk_alloc_disk_2arg], [
461719886fSMartin Matuska		#include <linux/blkdev.h>
471719886fSMartin Matuska	],[
481719886fSMartin Matuska		struct queue_limits *lim = NULL;
491719886fSMartin Matuska		struct gendisk *disk  __attribute__ ((unused));
501719886fSMartin Matuska		disk = blk_alloc_disk(lim, NUMA_NO_NODE);
511719886fSMartin Matuska	])
521719886fSMartin Matuska
53*29dc9349SMartin Matuska	ZFS_LINUX_TEST_SRC([blkdev_queue_limits_features], [
54*29dc9349SMartin Matuska		#include <linux/blkdev.h>
55*29dc9349SMartin Matuska	],[
56*29dc9349SMartin Matuska		struct queue_limits *lim = NULL;
57*29dc9349SMartin Matuska		lim->features = 0;
58*29dc9349SMartin Matuska	])
59*29dc9349SMartin Matuska
60271171e0SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_cleanup_disk], [
61271171e0SMartin Matuska		#include <linux/blkdev.h>
62271171e0SMartin Matuska	],[
63271171e0SMartin Matuska		struct gendisk *disk  __attribute__ ((unused));
64271171e0SMartin Matuska		blk_cleanup_disk(disk);
65271171e0SMartin Matuska	])
66eda14cbcSMatt Macy])
67eda14cbcSMatt Macy
68eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [
69eda14cbcSMatt Macy	dnl # Checked as part of the blk_alloc_queue_request_fn test
70eda14cbcSMatt Macy	dnl #
71eda14cbcSMatt Macy	dnl # Linux 5.9 API Change
72eda14cbcSMatt Macy	dnl # make_request_fn was moved into block_device_operations->submit_bio
73eda14cbcSMatt Macy	dnl #
74eda14cbcSMatt Macy	AC_MSG_CHECKING([whether submit_bio is member of struct block_device_operations])
75eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([block_device_operations_submit_bio], [
76eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
77eda14cbcSMatt Macy
78eda14cbcSMatt Macy		AC_DEFINE(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS, 1,
79eda14cbcSMatt Macy		    [submit_bio is member of struct block_device_operations])
801f88aa09SMartin Matuska
811f88aa09SMartin Matuska		dnl #
821f88aa09SMartin Matuska		dnl # Linux 5.14 API Change:
831f88aa09SMartin Matuska		dnl # blk_alloc_queue() + alloc_disk() combo replaced by
841f88aa09SMartin Matuska		dnl # a single call to blk_alloc_disk().
851f88aa09SMartin Matuska		dnl #
861f88aa09SMartin Matuska		AC_MSG_CHECKING([whether blk_alloc_disk() exists])
871f88aa09SMartin Matuska		ZFS_LINUX_TEST_RESULT([blk_alloc_disk], [
881f88aa09SMartin Matuska			AC_MSG_RESULT(yes)
891f88aa09SMartin Matuska			AC_DEFINE([HAVE_BLK_ALLOC_DISK], 1, [blk_alloc_disk() exists])
90271171e0SMartin Matuska
91271171e0SMartin Matuska			dnl #
92271171e0SMartin Matuska			dnl # 5.20 API change,
93271171e0SMartin Matuska			dnl # Removed blk_cleanup_disk(), put_disk() should be used.
94271171e0SMartin Matuska			dnl #
95271171e0SMartin Matuska			AC_MSG_CHECKING([whether blk_cleanup_disk() exists])
96271171e0SMartin Matuska			ZFS_LINUX_TEST_RESULT([blk_cleanup_disk], [
97271171e0SMartin Matuska				AC_MSG_RESULT(yes)
98271171e0SMartin Matuska				AC_DEFINE([HAVE_BLK_CLEANUP_DISK], 1,
99271171e0SMartin Matuska				    [blk_cleanup_disk() exists])
100271171e0SMartin Matuska			], [
101271171e0SMartin Matuska				AC_MSG_RESULT(no)
102271171e0SMartin Matuska			])
1031f88aa09SMartin Matuska		], [
1041f88aa09SMartin Matuska			AC_MSG_RESULT(no)
1051f88aa09SMartin Matuska		])
1061719886fSMartin Matuska
1071719886fSMartin Matuska		dnl #
1081719886fSMartin Matuska		dnl # Linux 6.9 API Change:
1091719886fSMartin Matuska		dnl # blk_alloc_queue() takes a nullable queue_limits arg.
1101719886fSMartin Matuska		dnl #
1111719886fSMartin Matuska		AC_MSG_CHECKING([whether blk_alloc_disk() exists and takes 2 args])
1121719886fSMartin Matuska		ZFS_LINUX_TEST_RESULT([blk_alloc_disk_2arg], [
1131719886fSMartin Matuska			AC_MSG_RESULT(yes)
1141719886fSMartin Matuska			AC_DEFINE([HAVE_BLK_ALLOC_DISK_2ARG], 1, [blk_alloc_disk() exists and takes 2 args])
1151719886fSMartin Matuska
1161719886fSMartin Matuska			dnl #
117*29dc9349SMartin Matuska			dnl # Linux 6.11 API change:
118*29dc9349SMartin Matuska			dnl # struct queue_limits gains a 'features' field,
119*29dc9349SMartin Matuska			dnl # used to set flushing options
120*29dc9349SMartin Matuska			dnl #
121*29dc9349SMartin Matuska			AC_MSG_CHECKING([whether struct queue_limits has a features field])
122*29dc9349SMartin Matuska			ZFS_LINUX_TEST_RESULT([blkdev_queue_limits_features], [
123*29dc9349SMartin Matuska				AC_MSG_RESULT(yes)
124*29dc9349SMartin Matuska				AC_DEFINE([HAVE_BLKDEV_QUEUE_LIMITS_FEATURES], 1,
125*29dc9349SMartin Matuska				    [struct queue_limits has a features field])
126*29dc9349SMartin Matuska			], [
127*29dc9349SMartin Matuska				AC_MSG_RESULT(no)
128*29dc9349SMartin Matuska			])
129*29dc9349SMartin Matuska
130*29dc9349SMartin Matuska			dnl #
1311719886fSMartin Matuska			dnl # 5.20 API change,
1321719886fSMartin Matuska			dnl # Removed blk_cleanup_disk(), put_disk() should be used.
1331719886fSMartin Matuska			dnl #
1341719886fSMartin Matuska			AC_MSG_CHECKING([whether blk_cleanup_disk() exists])
1351719886fSMartin Matuska			ZFS_LINUX_TEST_RESULT([blk_cleanup_disk], [
1361719886fSMartin Matuska				AC_MSG_RESULT(yes)
1371719886fSMartin Matuska				AC_DEFINE([HAVE_BLK_CLEANUP_DISK], 1,
1381719886fSMartin Matuska				    [blk_cleanup_disk() exists])
1391719886fSMartin Matuska			], [
1401719886fSMartin Matuska				AC_MSG_RESULT(no)
1411719886fSMartin Matuska			])
1421719886fSMartin Matuska		], [
1431719886fSMartin Matuska			AC_MSG_RESULT(no)
1441719886fSMartin Matuska		])
145eda14cbcSMatt Macy	],[
1467877fdebSMatt Macy		AC_MSG_RESULT(no)
1477877fdebSMatt Macy
148eda14cbcSMatt Macy		dnl # Checked as part of the blk_alloc_queue_request_fn test
149eda14cbcSMatt Macy		dnl #
150eda14cbcSMatt Macy		dnl # Linux 5.7 API Change
151eda14cbcSMatt Macy		dnl # blk_alloc_queue() expects request function.
152eda14cbcSMatt Macy		dnl #
153eda14cbcSMatt Macy		AC_MSG_CHECKING([whether blk_alloc_queue() expects request function])
154eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([blk_alloc_queue_request_fn], [
1557877fdebSMatt Macy			AC_MSG_RESULT(yes)
1567877fdebSMatt Macy
1577877fdebSMatt Macy			dnl # This is currently always the case.
158eda14cbcSMatt Macy			AC_MSG_CHECKING([whether make_request_fn() returns blk_qc_t])
159eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
160eda14cbcSMatt Macy
161eda14cbcSMatt Macy			AC_DEFINE(HAVE_BLK_ALLOC_QUEUE_REQUEST_FN, 1,
162eda14cbcSMatt Macy			    [blk_alloc_queue() expects request function])
163eda14cbcSMatt Macy			AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t,
164eda14cbcSMatt Macy			    [make_request_fn() return type])
165eda14cbcSMatt Macy			AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1,
166eda14cbcSMatt Macy			    [Noting that make_request_fn() returns blk_qc_t])
167eda14cbcSMatt Macy		],[
168eda14cbcSMatt Macy			dnl #
1697877fdebSMatt Macy			dnl # CentOS Stream 4.18.0-257 API Change
1707877fdebSMatt Macy			dnl # The Linux 5.7 blk_alloc_queue() change was back-
1717877fdebSMatt Macy			dnl # ported and the symbol renamed blk_alloc_queue_rh().
1727877fdebSMatt Macy			dnl # As of this kernel version they're not providing
1737877fdebSMatt Macy			dnl # any compatibility code in the kernel for this.
1747877fdebSMatt Macy			dnl #
1757877fdebSMatt Macy			ZFS_LINUX_TEST_RESULT([blk_alloc_queue_request_fn_rh], [
1767877fdebSMatt Macy				AC_MSG_RESULT(yes)
1777877fdebSMatt Macy
1787877fdebSMatt Macy				dnl # This is currently always the case.
1797877fdebSMatt Macy				AC_MSG_CHECKING([whether make_request_fn_rh() returns blk_qc_t])
1807877fdebSMatt Macy				AC_MSG_RESULT(yes)
1817877fdebSMatt Macy
1827877fdebSMatt Macy				AC_DEFINE(HAVE_BLK_ALLOC_QUEUE_REQUEST_FN_RH, 1,
1837877fdebSMatt Macy				    [blk_alloc_queue_rh() expects request function])
1847877fdebSMatt Macy				AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t,
1857877fdebSMatt Macy				    [make_request_fn() return type])
1867877fdebSMatt Macy				AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1,
1877877fdebSMatt Macy				    [Noting that make_request_fn() returns blk_qc_t])
1887877fdebSMatt Macy			],[
1897877fdebSMatt Macy				AC_MSG_RESULT(no)
1907877fdebSMatt Macy
1917877fdebSMatt Macy				dnl #
192eda14cbcSMatt Macy				dnl # Linux 4.4 API Change
193eda14cbcSMatt Macy				dnl # make_request_fn returns blk_qc_t.
194eda14cbcSMatt Macy				dnl #
195eda14cbcSMatt Macy				AC_MSG_CHECKING(
196eda14cbcSMatt Macy				    [whether make_request_fn() returns blk_qc_t])
197eda14cbcSMatt Macy				ZFS_LINUX_TEST_RESULT([make_request_fn_blk_qc_t], [
198eda14cbcSMatt Macy					AC_MSG_RESULT(yes)
199eda14cbcSMatt Macy					AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t,
200eda14cbcSMatt Macy					    [make_request_fn() return type])
201eda14cbcSMatt Macy					AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1,
202eda14cbcSMatt Macy					    [Noting that make_request_fn() ]
203eda14cbcSMatt Macy					    [returns blk_qc_t])
204eda14cbcSMatt Macy				],[
205eda14cbcSMatt Macy					ZFS_LINUX_TEST_ERROR([make_request_fn])
206eda14cbcSMatt Macy				])
207eda14cbcSMatt Macy			])
208eda14cbcSMatt Macy		])
209eda14cbcSMatt Macy	])
210eda14cbcSMatt Macy])
211