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