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> 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 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