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
194681ce946SMartin Matuskadnl #
195681ce946SMartin Matuskadnl # Linux 5.16 API
196681ce946SMartin Matuskadnl #
197681ce946SMartin Matuskadnl # bio_set_dev is no longer a helper macro and is now an inline function,
198681ce946SMartin Matuskadnl # meaning that the function it calls internally can no longer be overridden
199681ce946SMartin Matuskadnl # by our code
200681ce946SMartin Matuskadnl #
201681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO], [
202681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([bio_set_dev_macro], [
203681ce946SMartin Matuska		#include <linux/bio.h>
204681ce946SMartin Matuska		#include <linux/fs.h>
205681ce946SMartin Matuska	],[
206681ce946SMartin Matuska		#ifndef bio_set_dev
207681ce946SMartin Matuska		#error Not a macro
208681ce946SMartin Matuska		#endif
209681ce946SMartin Matuska	], [], [ZFS_META_LICENSE])
210681ce946SMartin Matuska])
211681ce946SMartin 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		])
226681ce946SMartin Matuska
227681ce946SMartin Matuska		AC_MSG_CHECKING([whether bio_set_dev() is a macro])
228681ce946SMartin Matuska		ZFS_LINUX_TEST_RESULT([bio_set_dev_macro], [
229681ce946SMartin Matuska			AC_MSG_RESULT(yes)
230681ce946SMartin Matuska			AC_DEFINE(HAVE_BIO_SET_DEV_MACRO, 1,
231681ce946SMartin Matuska			    [bio_set_dev() is a macro])
232681ce946SMartin Matuska		],[
233681ce946SMartin Matuska			AC_MSG_RESULT(no)
234681ce946SMartin 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>
250fd45b686SMartin Matuska		static 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
425681ce946SMartin Matuskadnl #
426681ce946SMartin Matuskadnl # Linux 5.16 API
427681ce946SMartin Matuskadnl #
428681ce946SMartin Matuskadnl # The Linux 5.16 API for submit_bio changed the return type to be
429681ce946SMartin Matuskadnl # void instead of int
430681ce946SMartin Matuskadnl #
431681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID], [
432681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([bio_bdev_submit_bio_void], [
433681ce946SMartin Matuska		#include <linux/blkdev.h>
434681ce946SMartin Matuska	],[
435681ce946SMartin Matuska		struct block_device_operations *bdev = NULL;
436681ce946SMartin Matuska		__attribute__((unused)) void(*f)(struct bio *) = bdev->submit_bio;
437681ce946SMartin Matuska	])
438681ce946SMartin Matuska])
439681ce946SMartin Matuska
440681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID], [
441681ce946SMartin Matuska	AC_MSG_CHECKING(
442681ce946SMartin Matuska		[whether block_device_operations->submit_bio() returns void])
443681ce946SMartin Matuska	ZFS_LINUX_TEST_RESULT([bio_bdev_submit_bio_void], [
444681ce946SMartin Matuska		AC_MSG_RESULT(yes)
445681ce946SMartin Matuska		AC_DEFINE(HAVE_BDEV_SUBMIT_BIO_RETURNS_VOID, 1,
446681ce946SMartin Matuska			[block_device_operations->submit_bio() returns void])
447681ce946SMartin Matuska	],[
448681ce946SMartin Matuska		AC_MSG_RESULT(no)
449681ce946SMartin Matuska	])
450681ce946SMartin Matuska])
451681ce946SMartin Matuska
452681ce946SMartin Matuskadnl #
453681ce946SMartin Matuskadnl # Linux 5.16 API
454681ce946SMartin Matuskadnl #
455681ce946SMartin Matuskadnl # The Linux 5.16 API moved struct blkcg_gq into linux/blk-cgroup.h, which
456681ce946SMartin Matuskadnl # has been around since 2015. This test looks for the presence of that
457681ce946SMartin Matuskadnl # header, so that it can be conditionally included where it exists, but
458681ce946SMartin Matuskadnl # still be backward compatible with kernels that pre-date its introduction.
459681ce946SMartin Matuskadnl #
460681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER], [
461681ce946SMartin Matuska	ZFS_LINUX_TEST_SRC([blk_cgroup_header], [
462681ce946SMartin Matuska		#include <linux/blk-cgroup.h>
463681ce946SMartin Matuska	], [])
464681ce946SMartin Matuska])
465681ce946SMartin Matuska
466681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_CGROUP_HEADER], [
467e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether linux/blk-cgroup.h exists])
468681ce946SMartin Matuska	ZFS_LINUX_TEST_RESULT([blk_cgroup_header],[
469681ce946SMartin Matuska		AC_MSG_RESULT(yes)
470681ce946SMartin Matuska		AC_DEFINE(HAVE_LINUX_BLK_CGROUP_HEADER, 1,
471681ce946SMartin Matuska			[linux/blk-cgroup.h exists])
472681ce946SMartin Matuska	],[
473681ce946SMartin Matuska		AC_MSG_RESULT(no)
474681ce946SMartin Matuska	])
475681ce946SMartin Matuska])
476681ce946SMartin Matuska
477da5137abSMartin Matuskadnl #
478da5137abSMartin Matuskadnl # Linux 5.18 API
479da5137abSMartin Matuskadnl #
480da5137abSMartin Matuskadnl # In 07888c665b405b1cd3577ddebfeb74f4717a84c4 ("block: pass a block_device and opf to bio_alloc")
481da5137abSMartin Matuskadnl #   bio_alloc(gfp_t gfp_mask, unsigned short nr_iovecs)
482da5137abSMartin Matuskadnl # became
483da5137abSMartin Matuskadnl #   bio_alloc(struct block_device *bdev, unsigned short nr_vecs, unsigned int opf, gfp_t gfp_mask)
484da5137abSMartin Matuskadnl # however
485da5137abSMartin Matuskadnl # > NULL/0 can be passed, both for the
486da5137abSMartin Matuskadnl # > passthrough case on a raw request_queue and to temporarily avoid
487da5137abSMartin Matuskadnl # > refactoring some nasty code.
488da5137abSMartin Matuskadnl #
489da5137abSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG], [
490da5137abSMartin Matuska	ZFS_LINUX_TEST_SRC([bio_alloc_4arg], [
491da5137abSMartin Matuska		#include <linux/bio.h>
492da5137abSMartin Matuska	],[
493da5137abSMartin Matuska		gfp_t gfp_mask = 0;
494da5137abSMartin Matuska		unsigned short nr_iovecs = 0;
495da5137abSMartin Matuska		struct block_device *bdev = NULL;
496da5137abSMartin Matuska		unsigned int opf = 0;
497da5137abSMartin Matuska
498da5137abSMartin Matuska		struct bio *__attribute__((unused)) allocated = bio_alloc(bdev, nr_iovecs, opf, gfp_mask);
499da5137abSMartin Matuska	])
500da5137abSMartin Matuska])
501da5137abSMartin Matuska
502da5137abSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BIO_ALLOC_4ARG], [
503e3aa18adSMartin Matuska	AC_MSG_CHECKING([whether bio_alloc() wants 4 args])
504da5137abSMartin Matuska	ZFS_LINUX_TEST_RESULT([bio_alloc_4arg],[
505da5137abSMartin Matuska		AC_MSG_RESULT(yes)
506da5137abSMartin Matuska		AC_DEFINE([HAVE_BIO_ALLOC_4ARG], 1, [bio_alloc() takes 4 arguments])
507da5137abSMartin Matuska	],[
508da5137abSMartin Matuska		AC_MSG_RESULT(no)
509da5137abSMartin Matuska	])
510da5137abSMartin Matuska])
511da5137abSMartin Matuska
512eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [
513eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_REQ
514eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_OPS
515eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_SET_DEV
516eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_END_IO_T_ARGS
517eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_BI_STATUS
518eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_BVEC_ITER
519eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_SUBMIT_BIO
520eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BIO_CURRENT_BIO_LIST
521eda14cbcSMatt Macy	ZFS_AC_KERNEL_SRC_BLKG_TRYGET
522caed7b1cSMartin Matuska	ZFS_AC_KERNEL_SRC_BIO_BDEV_DISK
523681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID
524681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO
525681ce946SMartin Matuska	ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER
526da5137abSMartin Matuska	ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG
527eda14cbcSMatt Macy])
528eda14cbcSMatt Macy
529eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BIO], [
530eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_FAILFAST_MASK
531eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_DISCARD
532eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_FLUSH
533eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_PREFLUSH
534eda14cbcSMatt Macy
535eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_DISCARD
536eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_SECURE_ERASE
537eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_REQ_OP_FLUSH
538eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BI_OPF
539eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SET_OP_ATTRS
540eda14cbcSMatt Macy
541eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SET_DEV
542eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
543eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BI_STATUS
544eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_BVEC_ITER
545eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_SUBMIT_BIO
546eda14cbcSMatt Macy	ZFS_AC_KERNEL_BIO_CURRENT_BIO_LIST
547eda14cbcSMatt Macy	ZFS_AC_KERNEL_BLKG_TRYGET
548caed7b1cSMartin Matuska	ZFS_AC_KERNEL_BIO_BDEV_DISK
549681ce946SMartin Matuska	ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID
550681ce946SMartin Matuska	ZFS_AC_KERNEL_BLK_CGROUP_HEADER
551da5137abSMartin Matuska	ZFS_AC_KERNEL_BIO_ALLOC_4ARG
552eda14cbcSMatt Macy])
553