2 dnl # 2.6.36 API change,
3 dnl # REQ_FAILFAST_{DEV|TRANSPORT|DRIVER}
8 dnl # REQ_FLUSH was renamed to REQ_PREFLUSH
10 AC_DEFUN([ZFS_AC_KERNEL_SRC_REQ], [
11 ZFS_LINUX_TEST_SRC([req_failfast_mask], [
12 #include <linux/bio.h>
14 int flags __attribute__ ((unused));
15 flags = REQ_FAILFAST_MASK;
18 ZFS_LINUX_TEST_SRC([req_discard], [
19 #include <linux/bio.h>
21 int flags __attribute__ ((unused));
25 ZFS_LINUX_TEST_SRC([req_flush], [
26 #include <linux/bio.h>
28 int flags __attribute__ ((unused));
32 ZFS_LINUX_TEST_SRC([req_preflush], [
33 #include <linux/bio.h>
35 int flags __attribute__ ((unused));
40 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_FAILFAST_MASK], [
41 AC_MSG_CHECKING([whether REQ_FAILFAST_MASK is defined])
42 ZFS_LINUX_TEST_RESULT([req_failfast_mask], [
45 ZFS_LINUX_TEST_ERROR([REQ_FAILFAST_MASK])
49 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_DISCARD], [
50 AC_MSG_CHECKING([whether REQ_DISCARD is defined])
51 ZFS_LINUX_TEST_RESULT([req_discard], [
53 AC_DEFINE(HAVE_REQ_DISCARD, 1, [REQ_DISCARD is defined])
59 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_FLUSH], [
60 AC_MSG_CHECKING([whether REQ_FLUSH is defined])
61 ZFS_LINUX_TEST_RESULT([req_flush], [
63 AC_DEFINE(HAVE_REQ_FLUSH, 1, [REQ_FLUSH is defined])
69 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_PREFLUSH], [
70 AC_MSG_CHECKING([whether REQ_PREFLUSH is defined])
71 ZFS_LINUX_TEST_RESULT([req_preflush], [
73 AC_DEFINE(HAVE_REQ_PREFLUSH, 1, [REQ_PREFLUSH is defined])
82 dnl # The bio_op() helper was introduced as a replacement for explicitly
83 dnl # checking the bio->bi_rw flags. The following checks are used to
84 dnl # detect if a specific operation is supported.
86 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_OPS], [
87 ZFS_LINUX_TEST_SRC([req_op_discard], [
88 #include <linux/blk_types.h>
90 int op __attribute__ ((unused)) = REQ_OP_DISCARD;
93 ZFS_LINUX_TEST_SRC([req_op_secure_erase], [
94 #include <linux/blk_types.h>
96 int op __attribute__ ((unused)) = REQ_OP_SECURE_ERASE;
99 ZFS_LINUX_TEST_SRC([req_op_flush], [
100 #include <linux/blk_types.h>
102 int op __attribute__ ((unused)) = REQ_OP_FLUSH;
105 ZFS_LINUX_TEST_SRC([bio_bi_opf], [
106 #include <linux/bio.h>
108 struct bio bio __attribute__ ((unused));
112 ZFS_LINUX_TEST_SRC([bio_set_op_attrs], [
113 #include <linux/bio.h>
115 struct bio *bio __attribute__ ((unused)) = NULL;
116 bio_set_op_attrs(bio, 0, 0);
120 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_DISCARD], [
121 AC_MSG_CHECKING([whether REQ_OP_DISCARD is defined])
122 ZFS_LINUX_TEST_RESULT([req_op_discard], [
124 AC_DEFINE(HAVE_REQ_OP_DISCARD, 1, [REQ_OP_DISCARD is defined])
130 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_SECURE_ERASE], [
131 AC_MSG_CHECKING([whether REQ_OP_SECURE_ERASE is defined])
132 ZFS_LINUX_TEST_RESULT([req_op_secure_erase], [
134 AC_DEFINE(HAVE_REQ_OP_SECURE_ERASE, 1,
135 [REQ_OP_SECURE_ERASE is defined])
141 AC_DEFUN([ZFS_AC_KERNEL_BIO_REQ_OP_FLUSH], [
142 AC_MSG_CHECKING([whether REQ_OP_FLUSH is defined])
143 ZFS_LINUX_TEST_RESULT([req_op_flush], [
145 AC_DEFINE(HAVE_REQ_OP_FLUSH, 1, [REQ_OP_FLUSH is defined])
151 AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_OPF], [
152 AC_MSG_CHECKING([whether bio->bi_opf is defined])
153 ZFS_LINUX_TEST_RESULT([bio_bi_opf], [
155 AC_DEFINE(HAVE_BIO_BI_OPF, 1, [bio->bi_opf is defined])
161 AC_DEFUN([ZFS_AC_KERNEL_BIO_SET_OP_ATTRS], [
162 AC_MSG_CHECKING([whether bio_set_op_attrs is available])
163 ZFS_LINUX_TEST_RESULT([bio_set_op_attrs], [
165 AC_DEFINE(HAVE_BIO_SET_OP_ATTRS, 1,
166 [bio_set_op_attrs is available])
173 dnl # Linux 4.14 API,
175 dnl # The bio_set_dev() helper macro was introduced as part of the transition
176 dnl # to have struct gendisk in struct bio.
180 dnl # The bio_set_dev() helper macro was updated to internally depend on
181 dnl # bio_associate_blkg() symbol which is exported GPL-only.
183 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SET_DEV], [
184 ZFS_LINUX_TEST_SRC([bio_set_dev], [
185 #include <linux/bio.h>
186 #include <linux/fs.h>
188 struct block_device *bdev = NULL;
189 struct bio *bio = NULL;
190 bio_set_dev(bio, bdev);
191 ], [], [$ZFS_META_LICENSE])
194 AC_DEFUN([ZFS_AC_KERNEL_BIO_SET_DEV], [
195 AC_MSG_CHECKING([whether bio_set_dev() is available])
196 ZFS_LINUX_TEST_RESULT([bio_set_dev], [
198 AC_DEFINE(HAVE_BIO_SET_DEV, 1, [bio_set_dev() is available])
200 AC_MSG_CHECKING([whether bio_set_dev() is GPL-only])
201 ZFS_LINUX_TEST_RESULT([bio_set_dev_license], [
205 AC_DEFINE(HAVE_BIO_SET_DEV_GPL_ONLY, 1,
206 [bio_set_dev() GPL-only])
215 dnl # Error argument dropped from bio_endio in favor of newly introduced
216 dnl # bio->bi_error. This also replaces bio->bi_flags value BIO_UPTODATE.
217 dnl # Introduced by torvalds/linux@4246a0b63bd8f56a1469b12eafeb875b1041a451
218 dnl # ("block: add a bi_error field to struct bio").
220 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_END_IO_T_ARGS], [
221 ZFS_LINUX_TEST_SRC([bio_end_io_t_args], [
222 #include <linux/bio.h>
223 void wanted_end_io(struct bio *bio) { return; }
224 bio_end_io_t *end_io __attribute__ ((unused)) = wanted_end_io;
228 AC_DEFUN([ZFS_AC_KERNEL_BIO_END_IO_T_ARGS], [
229 AC_MSG_CHECKING([whether bio_end_io_t wants 1 arg])
230 ZFS_LINUX_TEST_RESULT([bio_end_io_t_args], [
232 AC_DEFINE(HAVE_1ARG_BIO_END_IO_T, 1,
233 [bio_end_io_t wants 1 arg])
240 dnl # 4.13 API change
241 dnl # The bio->bi_error field was replaced with bio->bi_status which is an
242 dnl # enum which describes all possible error types.
244 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_BI_STATUS], [
245 ZFS_LINUX_TEST_SRC([bio_bi_status], [
246 #include <linux/bio.h>
248 struct bio bio __attribute__ ((unused));
249 blk_status_t status __attribute__ ((unused)) = BLK_STS_OK;
250 bio.bi_status = status;
254 AC_DEFUN([ZFS_AC_KERNEL_BIO_BI_STATUS], [
255 AC_MSG_CHECKING([whether bio->bi_status exists])
256 ZFS_LINUX_TEST_RESULT([bio_bi_status], [
258 AC_DEFINE(HAVE_BIO_BI_STATUS, 1, [bio->bi_status exists])
265 dnl # 3.14 API change,
266 dnl # Immutable biovecs. A number of fields of struct bio are moved to
267 dnl # struct bvec_iter.
269 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_BVEC_ITER], [
270 ZFS_LINUX_TEST_SRC([bio_bvec_iter], [
271 #include <linux/bio.h>
274 bio.bi_iter.bi_sector = 0;
278 AC_DEFUN([ZFS_AC_KERNEL_BIO_BVEC_ITER], [
279 AC_MSG_CHECKING([whether bio has bi_iter])
280 ZFS_LINUX_TEST_RESULT([bio_bvec_iter], [
282 AC_DEFINE(HAVE_BIO_BVEC_ITER, 1, [bio has bi_iter])
290 dnl # The rw argument has been removed from submit_bio/submit_bio_wait.
291 dnl # Callers are now expected to set bio->bi_rw instead of passing it in.
293 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_SUBMIT_BIO], [
294 ZFS_LINUX_TEST_SRC([submit_bio], [
295 #include <linux/bio.h>
298 struct bio *bio = NULL;
299 blk_qc = submit_bio(bio);
303 AC_DEFUN([ZFS_AC_KERNEL_BIO_SUBMIT_BIO], [
304 AC_MSG_CHECKING([whether submit_bio() wants 1 arg])
305 ZFS_LINUX_TEST_RESULT([submit_bio], [
307 AC_DEFINE(HAVE_1ARG_SUBMIT_BIO, 1, [submit_bio() wants 1 arg])
314 dnl # 2.6.34 API change
315 dnl # current->bio_list
317 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_CURRENT_BIO_LIST], [
318 ZFS_LINUX_TEST_SRC([current_bio_list], [
319 #include <linux/sched.h>
321 current->bio_list = (struct bio_list *) NULL;
325 AC_DEFUN([ZFS_AC_KERNEL_BIO_CURRENT_BIO_LIST], [
326 AC_MSG_CHECKING([whether current->bio_list exists])
327 ZFS_LINUX_TEST_RESULT([current_bio_list], [
330 ZFS_LINUX_TEST_ERROR([bio_list])
337 dnl # The Linux 5.5 kernel updated percpu_ref_tryget() which is inlined by
338 dnl # blkg_tryget() to use rcu_read_lock() instead of rcu_read_lock_sched().
339 dnl # As a side effect the function was converted to GPL-only.
341 AC_DEFUN([ZFS_AC_KERNEL_SRC_BLKG_TRYGET], [
342 ZFS_LINUX_TEST_SRC([blkg_tryget], [
343 #include <linux/blk-cgroup.h>
344 #include <linux/bio.h>
345 #include <linux/fs.h>
347 struct blkcg_gq blkg __attribute__ ((unused));
348 bool rc __attribute__ ((unused));
349 rc = blkg_tryget(&blkg);
350 ], [], [$ZFS_META_LICENSE])
353 AC_DEFUN([ZFS_AC_KERNEL_BLKG_TRYGET], [
354 AC_MSG_CHECKING([whether blkg_tryget() is available])
355 ZFS_LINUX_TEST_RESULT([blkg_tryget], [
357 AC_DEFINE(HAVE_BLKG_TRYGET, 1, [blkg_tryget() is available])
359 AC_MSG_CHECKING([whether blkg_tryget() is GPL-only])
360 ZFS_LINUX_TEST_RESULT([blkg_tryget_license], [
364 AC_DEFINE(HAVE_BLKG_TRYGET_GPL_ONLY, 1,
365 [blkg_tryget() GPL-only])
372 AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [
373 ZFS_AC_KERNEL_SRC_REQ
374 ZFS_AC_KERNEL_SRC_BIO_OPS
375 ZFS_AC_KERNEL_SRC_BIO_SET_DEV
376 ZFS_AC_KERNEL_SRC_BIO_END_IO_T_ARGS
377 ZFS_AC_KERNEL_SRC_BIO_BI_STATUS
378 ZFS_AC_KERNEL_SRC_BIO_BVEC_ITER
379 ZFS_AC_KERNEL_SRC_BIO_SUBMIT_BIO
380 ZFS_AC_KERNEL_SRC_BIO_CURRENT_BIO_LIST
381 ZFS_AC_KERNEL_SRC_BLKG_TRYGET
384 AC_DEFUN([ZFS_AC_KERNEL_BIO], [
385 ZFS_AC_KERNEL_BIO_REQ_FAILFAST_MASK
386 ZFS_AC_KERNEL_BIO_REQ_DISCARD
387 ZFS_AC_KERNEL_BIO_REQ_FLUSH
388 ZFS_AC_KERNEL_BIO_REQ_PREFLUSH
390 ZFS_AC_KERNEL_BIO_REQ_OP_DISCARD
391 ZFS_AC_KERNEL_BIO_REQ_OP_SECURE_ERASE
392 ZFS_AC_KERNEL_BIO_REQ_OP_FLUSH
393 ZFS_AC_KERNEL_BIO_BI_OPF
394 ZFS_AC_KERNEL_BIO_SET_OP_ATTRS
396 ZFS_AC_KERNEL_BIO_SET_DEV
397 ZFS_AC_KERNEL_BIO_END_IO_T_ARGS
398 ZFS_AC_KERNEL_BIO_BI_STATUS
399 ZFS_AC_KERNEL_BIO_BVEC_ITER
400 ZFS_AC_KERNEL_BIO_SUBMIT_BIO
401 ZFS_AC_KERNEL_BIO_CURRENT_BIO_LIST
402 ZFS_AC_KERNEL_BLKG_TRYGET