xref: /freebsd/sys/contrib/openzfs/config/kernel-bio.m4 (revision 681ce946f33e75c590e97c53076e86dff1fe8f4a)
1eda14cbcSMatt Macydnl #
2eda14cbcSMatt Macydnl # 2.6.36 API change,
3eda14cbcSMatt Macydnl # REQ_FAILFAST_{DEV|TRANSPORT|DRIVER}
4eda14cbcSMatt Macydnl # REQ_DISCARD
5eda14cbcSMatt Macydnl # REQ_FLUSH
6eda14cbcSMatt Macydnl #
7eda14cbcSMatt Macydnl # 4.8 - 4.9 API,
8eda14cbcSMatt Macydnl # REQ_FLUSH was renamed to REQ_PREFLUSH
9eda14cbcSMatt Macydnl #
10eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_REQ], [
11eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_failfast_mask], [
12eda14cbcSMatt Macy		#include <linux/bio.h>
13eda14cbcSMatt Macy	],[
14eda14cbcSMatt Macy		int flags __attribute__ ((unused));
15eda14cbcSMatt Macy		flags = REQ_FAILFAST_MASK;
16eda14cbcSMatt Macy	])
17eda14cbcSMatt Macy
18eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_discard], [
19eda14cbcSMatt Macy		#include <linux/bio.h>
20eda14cbcSMatt Macy	],[
21eda14cbcSMatt Macy		int flags __attribute__ ((unused));
22eda14cbcSMatt Macy		flags = REQ_DISCARD;
23eda14cbcSMatt Macy	])
24eda14cbcSMatt Macy
25eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_flush], [
26eda14cbcSMatt Macy		#include <linux/bio.h>
27eda14cbcSMatt Macy	],[
28eda14cbcSMatt Macy		int flags __attribute__ ((unused));
29eda14cbcSMatt Macy		flags = REQ_FLUSH;
30eda14cbcSMatt Macy	])
31eda14cbcSMatt Macy
32eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_preflush], [
33eda14cbcSMatt Macy		#include <linux/bio.h>
34eda14cbcSMatt Macy	],[
35eda14cbcSMatt Macy		int flags __attribute__ ((unused));
36eda14cbcSMatt Macy		flags = REQ_PREFLUSH;
37eda14cbcSMatt Macy	])
38eda14cbcSMatt Macy])
39eda14cbcSMatt Macy
40eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_FAILFAST_MASK], [
41eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_FAILFAST_MASK is defined])
42eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_failfast_mask], [
43eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
44eda14cbcSMatt Macy	],[
45eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([REQ_FAILFAST_MASK])
46eda14cbcSMatt Macy	])
47eda14cbcSMatt Macy])
48eda14cbcSMatt Macy
49eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_DISCARD], [
50eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_DISCARD is defined])
51eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_discard], [
52eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
53eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_DISCARD, 1, [REQ_DISCARD is defined])
54eda14cbcSMatt Macy	],[
55eda14cbcSMatt Macy		AC_MSG_RESULT(no)
56eda14cbcSMatt Macy	])
57eda14cbcSMatt Macy])
58eda14cbcSMatt Macy
59eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_FLUSH], [
60eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_FLUSH is defined])
61eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_flush], [
62eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
63eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_FLUSH, 1, [REQ_FLUSH is defined])
64eda14cbcSMatt Macy	],[
65eda14cbcSMatt Macy		AC_MSG_RESULT(no)
66eda14cbcSMatt Macy	])
67eda14cbcSMatt Macy])
68eda14cbcSMatt Macy
69eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_PREFLUSH], [
70eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_PREFLUSH is defined])
71eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_preflush], [
72eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
73eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_PREFLUSH, 1, [REQ_PREFLUSH is defined])
74eda14cbcSMatt Macy	],[
75eda14cbcSMatt Macy		AC_MSG_RESULT(no)
76eda14cbcSMatt Macy	])
77eda14cbcSMatt Macy])
78eda14cbcSMatt Macy
79eda14cbcSMatt Macydnl #
80eda14cbcSMatt Macydnl # Linux 4.8 API,
81eda14cbcSMatt Macydnl #
82eda14cbcSMatt Macydnl # The bio_op() helper was introduced as a replacement for explicitly
83eda14cbcSMatt Macydnl # checking the bio->bi_rw flags.  The following checks are used to
84eda14cbcSMatt Macydnl # detect if a specific operation is supported.
85eda14cbcSMatt Macydnl #
86eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_OPS], [
87eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_op_discard], [
88eda14cbcSMatt Macy		#include <linux/blk_types.h>
89eda14cbcSMatt Macy	],[
90eda14cbcSMatt Macy		int op __attribute__ ((unused)) = REQ_OP_DISCARD;
91eda14cbcSMatt Macy	])
92eda14cbcSMatt Macy
93eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_op_secure_erase], [
94eda14cbcSMatt Macy		#include <linux/blk_types.h>
95eda14cbcSMatt Macy	],[
96eda14cbcSMatt Macy		int op __attribute__ ((unused)) = REQ_OP_SECURE_ERASE;
97eda14cbcSMatt Macy	])
98eda14cbcSMatt Macy
99eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([req_op_flush], [
100eda14cbcSMatt Macy		#include <linux/blk_types.h>
101eda14cbcSMatt Macy	],[
102eda14cbcSMatt Macy		int op __attribute__ ((unused)) = REQ_OP_FLUSH;
103eda14cbcSMatt Macy	])
104eda14cbcSMatt Macy
105eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_bi_opf], [
106eda14cbcSMatt Macy		#include <linux/bio.h>
107eda14cbcSMatt Macy	],[
108eda14cbcSMatt Macy		struct bio bio __attribute__ ((unused));
109eda14cbcSMatt Macy		bio.bi_opf = 0;
110eda14cbcSMatt Macy	])
111eda14cbcSMatt Macy
112eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_set_op_attrs], [
113eda14cbcSMatt Macy		#include <linux/bio.h>
114eda14cbcSMatt Macy	],[
115eda14cbcSMatt Macy		struct bio *bio __attribute__ ((unused)) = NULL;
116eda14cbcSMatt Macy		bio_set_op_attrs(bio, 0, 0);
117eda14cbcSMatt Macy	])
118eda14cbcSMatt Macy])
119eda14cbcSMatt Macy
120eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_DISCARD], [
121eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_OP_DISCARD is defined])
122eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_op_discard], [
123eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
124eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_OP_DISCARD, 1, [REQ_OP_DISCARD is defined])
125eda14cbcSMatt Macy	],[
126eda14cbcSMatt Macy		AC_MSG_RESULT(no)
127eda14cbcSMatt Macy	])
128eda14cbcSMatt Macy])
129eda14cbcSMatt Macy
130eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_SECURE_ERASE], [
131eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_OP_SECURE_ERASE is defined])
132eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_op_secure_erase], [
133eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
134eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_OP_SECURE_ERASE, 1,
135eda14cbcSMatt Macy		    [REQ_OP_SECURE_ERASE is defined])
136eda14cbcSMatt Macy	],[
137eda14cbcSMatt Macy		AC_MSG_RESULT(no)
138eda14cbcSMatt Macy	])
139eda14cbcSMatt Macy])
140eda14cbcSMatt Macy
141eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_FLUSH], [
142eda14cbcSMatt Macy	AC_MSG_CHECKING([whether REQ_OP_FLUSH is defined])
143eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([req_op_flush], [
144eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
145eda14cbcSMatt Macy		AC_DEFINE(HAVE_REQ_OP_FLUSH, 1, [REQ_OP_FLUSH is defined])
146eda14cbcSMatt Macy	],[
147eda14cbcSMatt Macy		AC_MSG_RESULT(no)
148eda14cbcSMatt Macy	])
149eda14cbcSMatt Macy])
150eda14cbcSMatt Macy
151eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_BI_OPF], [
152eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio->bi_opf is defined])
153eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_bi_opf], [
154eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
155eda14cbcSMatt Macy		AC_DEFINE(HAVE_BIO_BI_OPF, 1, [bio->bi_opf is defined])
156eda14cbcSMatt Macy	],[
157eda14cbcSMatt Macy		AC_MSG_RESULT(no)
158eda14cbcSMatt Macy	])
159eda14cbcSMatt Macy])
160eda14cbcSMatt Macy
161eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_SET_OP_ATTRS], [
162eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio_set_op_attrs is available])
163eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_set_op_attrs], [
164eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
165eda14cbcSMatt Macy		AC_DEFINE(HAVE_BIO_SET_OP_ATTRS, 1,
166eda14cbcSMatt Macy		    [bio_set_op_attrs is available])
167eda14cbcSMatt Macy	],[
168eda14cbcSMatt Macy		AC_MSG_RESULT(no)
169eda14cbcSMatt Macy	])
170eda14cbcSMatt Macy])
171eda14cbcSMatt Macy
172eda14cbcSMatt Macydnl #
173eda14cbcSMatt Macydnl # Linux 4.14 API,
174eda14cbcSMatt Macydnl #
175eda14cbcSMatt Macydnl # The bio_set_dev() helper macro was introduced as part of the transition
176eda14cbcSMatt Macydnl # to have struct gendisk in struct bio.
177eda14cbcSMatt Macydnl #
178eda14cbcSMatt Macydnl # Linux 5.0 API,
179eda14cbcSMatt Macydnl #
180eda14cbcSMatt Macydnl # The bio_set_dev() helper macro was updated to internally depend on
181eda14cbcSMatt Macydnl # bio_associate_blkg() symbol which is exported GPL-only.
182eda14cbcSMatt Macydnl #
183eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SET_DEV], [
184eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_set_dev], [
185eda14cbcSMatt Macy		#include <linux/bio.h>
186eda14cbcSMatt Macy		#include <linux/fs.h>
187eda14cbcSMatt Macy	],[
188eda14cbcSMatt Macy		struct block_device *bdev = NULL;
189eda14cbcSMatt Macy		struct bio *bio = NULL;
190eda14cbcSMatt Macy		bio_set_dev(bio, bdev);
1917877fdebSMatt Macy	], [], [ZFS_META_LICENSE])
192eda14cbcSMatt Macy])
193eda14cbcSMatt Macy
194*681ce946SMartin Matuskadnl #
195*681ce946SMartin Matuskadnl # Linux 5.16 API
196*681ce946SMartin Matuskadnl #
197*681ce946SMartin Matuskadnl # bio_set_dev is no longer a helper macro and is now an inline function,
198*681ce946SMartin Matuskadnl # meaning that the function it calls internally can no longer be overridden
199*681ce946SMartin Matuskadnl # by our code
200*681ce946SMartin Matuskadnl #
201*681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO], [
202*681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([bio_set_dev_macro], [
203*681ce946SMartin Matuska		#include <linux/bio.h>
204*681ce946SMartin Matuska		#include <linux/fs.h>
205*681ce946SMartin Matuska	],[
206*681ce946SMartin Matuska		#ifndef bio_set_dev
207*681ce946SMartin Matuska		#error Not a macro
208*681ce946SMartin Matuska		#endif
209*681ce946SMartin Matuska	], [], [ZFS_META_LICENSE])
210*681ce946SMartin Matuska])
211*681ce946SMartin Matuska
212eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_SET_DEV], [
213eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio_set_dev() is available])
214eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_set_dev], [
215eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
216eda14cbcSMatt Macy		AC_DEFINE(HAVE_BIO_SET_DEV, 1, [bio_set_dev() is available])
217eda14cbcSMatt Macy
218eda14cbcSMatt Macy		AC_MSG_CHECKING([whether bio_set_dev() is GPL-only])
219eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([bio_set_dev_license], [
220eda14cbcSMatt Macy			AC_MSG_RESULT(no)
221eda14cbcSMatt Macy		],[
222eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
223eda14cbcSMatt Macy			AC_DEFINE(HAVE_BIO_SET_DEV_GPL_ONLY, 1,
224eda14cbcSMatt Macy			    [bio_set_dev() GPL-only])
225eda14cbcSMatt Macy		])
226*681ce946SMartin Matuska
227*681ce946SMartin Matuska		AC_MSG_CHECKING([whether bio_set_dev() is a macro])
228*681ce946SMartin Matuska		ZFS_LINUX_TEST_RESULT([bio_set_dev_macro], [
229*681ce946SMartin Matuska			AC_MSG_RESULT(yes)
230*681ce946SMartin Matuska			AC_DEFINE(HAVE_BIO_SET_DEV_MACRO, 1,
231*681ce946SMartin Matuska			    [bio_set_dev() is a macro])
232*681ce946SMartin Matuska		],[
233*681ce946SMartin Matuska			AC_MSG_RESULT(no)
234*681ce946SMartin Matuska		])
235eda14cbcSMatt Macy	],[
236eda14cbcSMatt Macy		AC_MSG_RESULT(no)
237eda14cbcSMatt Macy	])
238eda14cbcSMatt Macy])
239eda14cbcSMatt Macy
240eda14cbcSMatt Macydnl #
241eda14cbcSMatt Macydnl # 4.3 API change
242eda14cbcSMatt Macydnl # Error argument dropped from bio_endio in favor of newly introduced
243eda14cbcSMatt Macydnl # bio->bi_error. This also replaces bio->bi_flags value BIO_UPTODATE.
244eda14cbcSMatt Macydnl # Introduced by torvalds/linux@4246a0b63bd8f56a1469b12eafeb875b1041a451
245eda14cbcSMatt Macydnl # ("block: add a bi_error field to struct bio").
246eda14cbcSMatt Macydnl #
247eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_END_IO_T_ARGS], [
248eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_end_io_t_args], [
249eda14cbcSMatt Macy		#include <linux/bio.h>
250eda14cbcSMatt Macy		void wanted_end_io(struct bio *bio) { return; }
251eda14cbcSMatt Macy		bio_end_io_t *end_io __attribute__ ((unused)) = wanted_end_io;
252eda14cbcSMatt Macy	], [])
253eda14cbcSMatt Macy])
254eda14cbcSMatt Macy
255eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_END_IO_T_ARGS], [
256eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio_end_io_t wants 1 arg])
257eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_end_io_t_args], [
258eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
259eda14cbcSMatt Macy		AC_DEFINE(HAVE_1ARG_BIO_END_IO_T, 1,
260eda14cbcSMatt Macy		    [bio_end_io_t wants 1 arg])
261eda14cbcSMatt Macy	], [
262eda14cbcSMatt Macy		AC_MSG_RESULT(no)
263eda14cbcSMatt Macy	])
264eda14cbcSMatt Macy])
265eda14cbcSMatt Macy
266eda14cbcSMatt Macydnl #
267eda14cbcSMatt Macydnl # 4.13 API change
268eda14cbcSMatt Macydnl # The bio->bi_error field was replaced with bio->bi_status which is an
269eda14cbcSMatt Macydnl # enum which describes all possible error types.
270eda14cbcSMatt Macydnl #
271eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_BI_STATUS], [
272eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_bi_status], [
273eda14cbcSMatt Macy		#include <linux/bio.h>
274eda14cbcSMatt Macy	], [
275eda14cbcSMatt Macy		struct bio bio __attribute__ ((unused));
276eda14cbcSMatt Macy		blk_status_t status __attribute__ ((unused)) = BLK_STS_OK;
277eda14cbcSMatt Macy		bio.bi_status = status;
278eda14cbcSMatt Macy	])
279eda14cbcSMatt Macy])
280eda14cbcSMatt Macy
281eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_BI_STATUS], [
282eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio->bi_status exists])
283eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_bi_status], [
284eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
285eda14cbcSMatt Macy		AC_DEFINE(HAVE_BIO_BI_STATUS, 1, [bio->bi_status exists])
286eda14cbcSMatt Macy	],[
287eda14cbcSMatt Macy		AC_MSG_RESULT(no)
288eda14cbcSMatt Macy	])
289eda14cbcSMatt Macy])
290eda14cbcSMatt Macy
291eda14cbcSMatt Macydnl #
292eda14cbcSMatt Macydnl # 3.14 API change,
293eda14cbcSMatt Macydnl # Immutable biovecs. A number of fields of struct bio are moved to
294eda14cbcSMatt Macydnl # struct bvec_iter.
295eda14cbcSMatt Macydnl #
296eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_BVEC_ITER], [
297eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([bio_bvec_iter], [
298eda14cbcSMatt Macy		#include <linux/bio.h>
299eda14cbcSMatt Macy	],[
300eda14cbcSMatt Macy		struct bio bio;
301eda14cbcSMatt Macy		bio.bi_iter.bi_sector = 0;
302eda14cbcSMatt Macy	])
303eda14cbcSMatt Macy])
304eda14cbcSMatt Macy
305eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_BVEC_ITER], [
306eda14cbcSMatt Macy	AC_MSG_CHECKING([whether bio has bi_iter])
307eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([bio_bvec_iter], [
308eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
309eda14cbcSMatt Macy		AC_DEFINE(HAVE_BIO_BVEC_ITER, 1, [bio has bi_iter])
310eda14cbcSMatt Macy	],[
311eda14cbcSMatt Macy		AC_MSG_RESULT(no)
312eda14cbcSMatt Macy	])
313eda14cbcSMatt Macy])
314eda14cbcSMatt Macy
315eda14cbcSMatt Macydnl #
316eda14cbcSMatt Macydnl # 4.8 API change
317eda14cbcSMatt Macydnl # The rw argument has been removed from submit_bio/submit_bio_wait.
318eda14cbcSMatt Macydnl # Callers are now expected to set bio->bi_rw instead of passing it in.
319eda14cbcSMatt Macydnl #
320eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SUBMIT_BIO], [
321eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([submit_bio], [
322eda14cbcSMatt Macy		#include <linux/bio.h>
323eda14cbcSMatt Macy	],[
324eda14cbcSMatt Macy		struct bio *bio = NULL;
32581b22a98SMartin Matuska		(void) submit_bio(bio);
326eda14cbcSMatt Macy	])
327eda14cbcSMatt Macy])
328eda14cbcSMatt Macy
329eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_SUBMIT_BIO], [
330eda14cbcSMatt Macy	AC_MSG_CHECKING([whether submit_bio() wants 1 arg])
331eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([submit_bio], [
332eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
333eda14cbcSMatt Macy		AC_DEFINE(HAVE_1ARG_SUBMIT_BIO, 1, [submit_bio() wants 1 arg])
334eda14cbcSMatt Macy	],[
335eda14cbcSMatt Macy		AC_MSG_RESULT(no)
336eda14cbcSMatt Macy	])
337eda14cbcSMatt Macy])
338eda14cbcSMatt Macy
339eda14cbcSMatt Macydnl #
340eda14cbcSMatt Macydnl # 2.6.34 API change
341eda14cbcSMatt Macydnl # current->bio_list
342eda14cbcSMatt Macydnl #
343eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_CURRENT_BIO_LIST], [
344eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([current_bio_list], [
345eda14cbcSMatt Macy		#include <linux/sched.h>
346eda14cbcSMatt Macy	], [
347eda14cbcSMatt Macy		current->bio_list = (struct bio_list *) NULL;
348eda14cbcSMatt Macy	])
349eda14cbcSMatt Macy])
350eda14cbcSMatt Macy
351eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO_CURRENT_BIO_LIST], [
352eda14cbcSMatt Macy	AC_MSG_CHECKING([whether current->bio_list exists])
353eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([current_bio_list], [
354eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
355eda14cbcSMatt Macy	],[
356eda14cbcSMatt Macy		ZFS_LINUX_TEST_ERROR([bio_list])
357eda14cbcSMatt Macy	])
358eda14cbcSMatt Macy])
359eda14cbcSMatt Macy
360eda14cbcSMatt Macydnl #
361eda14cbcSMatt Macydnl # Linux 5.5 API,
362eda14cbcSMatt Macydnl #
363eda14cbcSMatt Macydnl # The Linux 5.5 kernel updated percpu_ref_tryget() which is inlined by
364eda14cbcSMatt Macydnl # blkg_tryget() to use rcu_read_lock() instead of rcu_read_lock_sched().
365eda14cbcSMatt Macydnl # As a side effect the function was converted to GPL-only.
366eda14cbcSMatt Macydnl #
367eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKG_TRYGET], [
368eda14cbcSMatt Macy	ZFS_LINUX_TEST_SRC([blkg_tryget], [
369eda14cbcSMatt Macy		#include <linux/blk-cgroup.h>
370eda14cbcSMatt Macy		#include <linux/bio.h>
371eda14cbcSMatt Macy		#include <linux/fs.h>
372eda14cbcSMatt Macy	],[
373180f8225SMatt Macy		struct blkcg_gq blkg __attribute__ ((unused)) = {};
374eda14cbcSMatt Macy		bool rc __attribute__ ((unused));
375eda14cbcSMatt Macy		rc = blkg_tryget(&blkg);
3767877fdebSMatt Macy	], [], [ZFS_META_LICENSE])
377eda14cbcSMatt Macy])
378eda14cbcSMatt Macy
379eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKG_TRYGET], [
380eda14cbcSMatt Macy	AC_MSG_CHECKING([whether blkg_tryget() is available])
381eda14cbcSMatt Macy	ZFS_LINUX_TEST_RESULT([blkg_tryget], [
382eda14cbcSMatt Macy		AC_MSG_RESULT(yes)
383eda14cbcSMatt Macy		AC_DEFINE(HAVE_BLKG_TRYGET, 1, [blkg_tryget() is available])
384eda14cbcSMatt Macy
385eda14cbcSMatt Macy		AC_MSG_CHECKING([whether blkg_tryget() is GPL-only])
386eda14cbcSMatt Macy		ZFS_LINUX_TEST_RESULT([blkg_tryget_license], [
387eda14cbcSMatt Macy			AC_MSG_RESULT(no)
388eda14cbcSMatt Macy		],[
389eda14cbcSMatt Macy			AC_MSG_RESULT(yes)
390eda14cbcSMatt Macy			AC_DEFINE(HAVE_BLKG_TRYGET_GPL_ONLY, 1,
391eda14cbcSMatt Macy			    [blkg_tryget() GPL-only])
392eda14cbcSMatt Macy		])
393eda14cbcSMatt Macy	],[
394eda14cbcSMatt Macy		AC_MSG_RESULT(no)
395eda14cbcSMatt Macy	])
396eda14cbcSMatt Macy])
397eda14cbcSMatt Macy
398caed7b1cSMartin Matuskadnl #
399caed7b1cSMartin Matuskadnl # Linux 5.12 API,
400caed7b1cSMartin Matuskadnl #
401caed7b1cSMartin Matuskadnl # The Linux 5.12 kernel updated struct bio to create a new bi_bdev member
402caed7b1cSMartin Matuskadnl # and bio->bi_disk was moved to bio->bi_bdev->bd_disk
403caed7b1cSMartin Matuskadnl #
404caed7b1cSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_BDEV_DISK], [
405caed7b1cSMartin Matuska	ZFS_LINUX_TEST_SRC([bio_bdev_disk], [
406caed7b1cSMartin Matuska		#include <linux/blk_types.h>
407caed7b1cSMartin Matuska		#include <linux/blkdev.h>
408caed7b1cSMartin Matuska	],[
409caed7b1cSMartin Matuska		struct bio *b = NULL;
410caed7b1cSMartin Matuska		struct gendisk *d = b->bi_bdev->bd_disk;
411caed7b1cSMartin Matuska		blk_register_queue(d);
412caed7b1cSMartin Matuska	])
413caed7b1cSMartin Matuska])
414caed7b1cSMartin Matuska
415caed7b1cSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BIO_BDEV_DISK], [
416caed7b1cSMartin Matuska	AC_MSG_CHECKING([whether bio->bi_bdev->bd_disk exists])
417caed7b1cSMartin Matuska	ZFS_LINUX_TEST_RESULT([bio_bdev_disk], [
418caed7b1cSMartin Matuska		AC_MSG_RESULT(yes)
419caed7b1cSMartin Matuska		AC_DEFINE(HAVE_BIO_BDEV_DISK, 1, [bio->bi_bdev->bd_disk exists])
420caed7b1cSMartin Matuska	],[
421caed7b1cSMartin Matuska		AC_MSG_RESULT(no)
422caed7b1cSMartin Matuska	])
423caed7b1cSMartin Matuska])
424caed7b1cSMartin Matuska
425*681ce946SMartin Matuskadnl #
426*681ce946SMartin Matuskadnl # Linux 5.16 API
427*681ce946SMartin Matuskadnl #
428*681ce946SMartin Matuskadnl # The Linux 5.16 API for submit_bio changed the return type to be
429*681ce946SMartin Matuskadnl # void instead of int
430*681ce946SMartin Matuskadnl #
431*681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID], [
432*681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([bio_bdev_submit_bio_void], [
433*681ce946SMartin Matuska		#include <linux/blkdev.h>
434*681ce946SMartin Matuska	],[
435*681ce946SMartin Matuska		struct block_device_operations *bdev = NULL;
436*681ce946SMartin Matuska		__attribute__((unused)) void(*f)(struct bio *) = bdev->submit_bio;
437*681ce946SMartin Matuska	])
438*681ce946SMartin Matuska])
439*681ce946SMartin Matuska
440*681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID], [
441*681ce946SMartin Matuska	AC_MSG_CHECKING(
442*681ce946SMartin Matuska		[whether block_device_operations->submit_bio() returns void])
443*681ce946SMartin Matuska	ZFS_LINUX_TEST_RESULT([bio_bdev_submit_bio_void], [
444*681ce946SMartin Matuska		AC_MSG_RESULT(yes)
445*681ce946SMartin Matuska		AC_DEFINE(HAVE_BDEV_SUBMIT_BIO_RETURNS_VOID, 1,
446*681ce946SMartin Matuska			[block_device_operations->submit_bio() returns void])
447*681ce946SMartin Matuska	],[
448*681ce946SMartin Matuska		AC_MSG_RESULT(no)
449*681ce946SMartin Matuska	])
450*681ce946SMartin Matuska])
451*681ce946SMartin Matuska
452*681ce946SMartin Matuskadnl #
453*681ce946SMartin Matuskadnl # Linux 5.16 API
454*681ce946SMartin Matuskadnl #
455*681ce946SMartin Matuskadnl # The Linux 5.16 API moved struct blkcg_gq into linux/blk-cgroup.h, which
456*681ce946SMartin Matuskadnl # has been around since 2015. This test looks for the presence of that
457*681ce946SMartin Matuskadnl # header, so that it can be conditionally included where it exists, but
458*681ce946SMartin Matuskadnl # still be backward compatible with kernels that pre-date its introduction.
459*681ce946SMartin Matuskadnl #
460*681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER], [
461*681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_cgroup_header], [
462*681ce946SMartin Matuska		#include <linux/blk-cgroup.h>
463*681ce946SMartin Matuska	], [])
464*681ce946SMartin Matuska])
465*681ce946SMartin Matuska
466*681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_CGROUP_HEADER], [
467*681ce946SMartin Matuska	AC_MSG_CHECKING([for existence of linux/blk-cgroup.h])
468*681ce946SMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_cgroup_header],[
469*681ce946SMartin Matuska		AC_MSG_RESULT(yes)
470*681ce946SMartin Matuska		AC_DEFINE(HAVE_LINUX_BLK_CGROUP_HEADER, 1,
471*681ce946SMartin Matuska			[linux/blk-cgroup.h exists])
472*681ce946SMartin Matuska	],[
473*681ce946SMartin Matuska		AC_MSG_RESULT(no)
474*681ce946SMartin Matuska	])
475*681ce946SMartin Matuska])
476*681ce946SMartin Matuska
477eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [
478eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_REQ
479eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_OPS
480eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_SET_DEV
481eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_END_IO_T_ARGS
482eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_BI_STATUS
483eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_BVEC_ITER
484eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_SUBMIT_BIO
485eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_CURRENT_BIO_LIST
486eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKG_TRYGET
487caed7b1cSMartin Matuska	ZFS_AC_KERNEL_SRC_BIO_BDEV_DISK
488*681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID
489*681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO
490*681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER
491eda14cbcSMatt Macy])
492eda14cbcSMatt Macy
493eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO], [
494eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_FAILFAST_MASK
495eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_DISCARD
496eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_FLUSH
497eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_PREFLUSH
498eda14cbcSMatt Macy
499eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_DISCARD
500eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_SECURE_ERASE
501eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_FLUSH
502eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BI_OPF
503eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SET_OP_ATTRS
504eda14cbcSMatt Macy
505eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SET_DEV
506eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
507eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BI_STATUS
508eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BVEC_ITER
509eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SUBMIT_BIO
510eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_CURRENT_BIO_LIST
511eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKG_TRYGET
512caed7b1cSMartin Matuska	ZFS_AC_KERNEL_BIO_BDEV_DISK
513*681ce946SMartin Matuska	ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID
514*681ce946SMartin Matuska	ZFS_AC_KERNEL_BLK_CGROUP_HEADER
515eda14cbcSMatt Macy])
516