1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # Check for make_request_fn interface. 3eda14cbcSMatt Macydnl # 4eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN], [ 5eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([make_request_fn_blk_qc_t], [ 6eda14cbcSMatt Macy #include <linux/blkdev.h> 7fd45b686SMartin Matuska static blk_qc_t make_request(struct request_queue *q, 8eda14cbcSMatt Macy struct bio *bio) { return (BLK_QC_T_NONE); } 9eda14cbcSMatt Macy ],[ 10eda14cbcSMatt Macy blk_queue_make_request(NULL, &make_request); 11eda14cbcSMatt Macy ]) 12eda14cbcSMatt Macy 13eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_alloc_queue_request_fn], [ 14eda14cbcSMatt Macy #include <linux/blkdev.h> 15fd45b686SMartin Matuska static blk_qc_t make_request(struct request_queue *q, 16eda14cbcSMatt Macy struct bio *bio) { return (BLK_QC_T_NONE); } 17eda14cbcSMatt Macy ],[ 18eda14cbcSMatt Macy struct request_queue *q __attribute__ ((unused)); 19eda14cbcSMatt Macy q = blk_alloc_queue(make_request, NUMA_NO_NODE); 20eda14cbcSMatt Macy ]) 21eda14cbcSMatt Macy 227877fdebSMatt Macy ZFS_LINUX_TEST_SRC([blk_alloc_queue_request_fn_rh], [ 237877fdebSMatt Macy #include <linux/blkdev.h> 24fd45b686SMartin Matuska static blk_qc_t make_request(struct request_queue *q, 257877fdebSMatt Macy struct bio *bio) { return (BLK_QC_T_NONE); } 267877fdebSMatt Macy ],[ 277877fdebSMatt Macy struct request_queue *q __attribute__ ((unused)); 287877fdebSMatt Macy q = blk_alloc_queue_rh(make_request, NUMA_NO_NODE); 297877fdebSMatt Macy ]) 307877fdebSMatt Macy 31eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([block_device_operations_submit_bio], [ 32eda14cbcSMatt Macy #include <linux/blkdev.h> 33eda14cbcSMatt Macy ],[ 34eda14cbcSMatt Macy struct block_device_operations o; 35eda14cbcSMatt Macy o.submit_bio = NULL; 36eda14cbcSMatt Macy ]) 371f88aa09SMartin Matuska 381f88aa09SMartin Matuska ZFS_LINUX_TEST_SRC([blk_alloc_disk], [ 391f88aa09SMartin Matuska #include <linux/blkdev.h> 401f88aa09SMartin Matuska ],[ 411f88aa09SMartin Matuska struct gendisk *disk __attribute__ ((unused)); 421f88aa09SMartin Matuska disk = blk_alloc_disk(NUMA_NO_NODE); 431f88aa09SMartin Matuska ]) 44271171e0SMartin Matuska 451719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blk_alloc_disk_2arg], [ 461719886fSMartin Matuska #include <linux/blkdev.h> 471719886fSMartin Matuska ],[ 481719886fSMartin Matuska struct queue_limits *lim = NULL; 491719886fSMartin Matuska struct gendisk *disk __attribute__ ((unused)); 501719886fSMartin Matuska disk = blk_alloc_disk(lim, NUMA_NO_NODE); 511719886fSMartin Matuska ]) 521719886fSMartin Matuska 53*29dc9349SMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_queue_limits_features], [ 54*29dc9349SMartin Matuska #include <linux/blkdev.h> 55*29dc9349SMartin Matuska ],[ 56*29dc9349SMartin Matuska struct queue_limits *lim = NULL; 57*29dc9349SMartin Matuska lim->features = 0; 58*29dc9349SMartin Matuska ]) 59*29dc9349SMartin Matuska 60271171e0SMartin Matuska ZFS_LINUX_TEST_SRC([blk_cleanup_disk], [ 61271171e0SMartin Matuska #include <linux/blkdev.h> 62271171e0SMartin Matuska ],[ 63271171e0SMartin Matuska struct gendisk *disk __attribute__ ((unused)); 64271171e0SMartin Matuska blk_cleanup_disk(disk); 65271171e0SMartin Matuska ]) 66eda14cbcSMatt Macy]) 67eda14cbcSMatt Macy 68eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ 69eda14cbcSMatt Macy dnl # Checked as part of the blk_alloc_queue_request_fn test 70eda14cbcSMatt Macy dnl # 71eda14cbcSMatt Macy dnl # Linux 5.9 API Change 72eda14cbcSMatt Macy dnl # make_request_fn was moved into block_device_operations->submit_bio 73eda14cbcSMatt Macy dnl # 74eda14cbcSMatt Macy AC_MSG_CHECKING([whether submit_bio is member of struct block_device_operations]) 75eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([block_device_operations_submit_bio], [ 76eda14cbcSMatt Macy AC_MSG_RESULT(yes) 77eda14cbcSMatt Macy 78eda14cbcSMatt Macy AC_DEFINE(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS, 1, 79eda14cbcSMatt Macy [submit_bio is member of struct block_device_operations]) 801f88aa09SMartin Matuska 811f88aa09SMartin Matuska dnl # 821f88aa09SMartin Matuska dnl # Linux 5.14 API Change: 831f88aa09SMartin Matuska dnl # blk_alloc_queue() + alloc_disk() combo replaced by 841f88aa09SMartin Matuska dnl # a single call to blk_alloc_disk(). 851f88aa09SMartin Matuska dnl # 861f88aa09SMartin Matuska AC_MSG_CHECKING([whether blk_alloc_disk() exists]) 871f88aa09SMartin Matuska ZFS_LINUX_TEST_RESULT([blk_alloc_disk], [ 881f88aa09SMartin Matuska AC_MSG_RESULT(yes) 891f88aa09SMartin Matuska AC_DEFINE([HAVE_BLK_ALLOC_DISK], 1, [blk_alloc_disk() exists]) 90271171e0SMartin Matuska 91271171e0SMartin Matuska dnl # 92271171e0SMartin Matuska dnl # 5.20 API change, 93271171e0SMartin Matuska dnl # Removed blk_cleanup_disk(), put_disk() should be used. 94271171e0SMartin Matuska dnl # 95271171e0SMartin Matuska AC_MSG_CHECKING([whether blk_cleanup_disk() exists]) 96271171e0SMartin Matuska ZFS_LINUX_TEST_RESULT([blk_cleanup_disk], [ 97271171e0SMartin Matuska AC_MSG_RESULT(yes) 98271171e0SMartin Matuska AC_DEFINE([HAVE_BLK_CLEANUP_DISK], 1, 99271171e0SMartin Matuska [blk_cleanup_disk() exists]) 100271171e0SMartin Matuska ], [ 101271171e0SMartin Matuska AC_MSG_RESULT(no) 102271171e0SMartin Matuska ]) 1031f88aa09SMartin Matuska ], [ 1041f88aa09SMartin Matuska AC_MSG_RESULT(no) 1051f88aa09SMartin Matuska ]) 1061719886fSMartin Matuska 1071719886fSMartin Matuska dnl # 1081719886fSMartin Matuska dnl # Linux 6.9 API Change: 1091719886fSMartin Matuska dnl # blk_alloc_queue() takes a nullable queue_limits arg. 1101719886fSMartin Matuska dnl # 1111719886fSMartin Matuska AC_MSG_CHECKING([whether blk_alloc_disk() exists and takes 2 args]) 1121719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_alloc_disk_2arg], [ 1131719886fSMartin Matuska AC_MSG_RESULT(yes) 1141719886fSMartin Matuska AC_DEFINE([HAVE_BLK_ALLOC_DISK_2ARG], 1, [blk_alloc_disk() exists and takes 2 args]) 1151719886fSMartin Matuska 1161719886fSMartin Matuska dnl # 117*29dc9349SMartin Matuska dnl # Linux 6.11 API change: 118*29dc9349SMartin Matuska dnl # struct queue_limits gains a 'features' field, 119*29dc9349SMartin Matuska dnl # used to set flushing options 120*29dc9349SMartin Matuska dnl # 121*29dc9349SMartin Matuska AC_MSG_CHECKING([whether struct queue_limits has a features field]) 122*29dc9349SMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_queue_limits_features], [ 123*29dc9349SMartin Matuska AC_MSG_RESULT(yes) 124*29dc9349SMartin Matuska AC_DEFINE([HAVE_BLKDEV_QUEUE_LIMITS_FEATURES], 1, 125*29dc9349SMartin Matuska [struct queue_limits has a features field]) 126*29dc9349SMartin Matuska ], [ 127*29dc9349SMartin Matuska AC_MSG_RESULT(no) 128*29dc9349SMartin Matuska ]) 129*29dc9349SMartin Matuska 130*29dc9349SMartin Matuska dnl # 1311719886fSMartin Matuska dnl # 5.20 API change, 1321719886fSMartin Matuska dnl # Removed blk_cleanup_disk(), put_disk() should be used. 1331719886fSMartin Matuska dnl # 1341719886fSMartin Matuska AC_MSG_CHECKING([whether blk_cleanup_disk() exists]) 1351719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_cleanup_disk], [ 1361719886fSMartin Matuska AC_MSG_RESULT(yes) 1371719886fSMartin Matuska AC_DEFINE([HAVE_BLK_CLEANUP_DISK], 1, 1381719886fSMartin Matuska [blk_cleanup_disk() exists]) 1391719886fSMartin Matuska ], [ 1401719886fSMartin Matuska AC_MSG_RESULT(no) 1411719886fSMartin Matuska ]) 1421719886fSMartin Matuska ], [ 1431719886fSMartin Matuska AC_MSG_RESULT(no) 1441719886fSMartin Matuska ]) 145eda14cbcSMatt Macy ],[ 1467877fdebSMatt Macy AC_MSG_RESULT(no) 1477877fdebSMatt Macy 148eda14cbcSMatt Macy dnl # Checked as part of the blk_alloc_queue_request_fn test 149eda14cbcSMatt Macy dnl # 150eda14cbcSMatt Macy dnl # Linux 5.7 API Change 151eda14cbcSMatt Macy dnl # blk_alloc_queue() expects request function. 152eda14cbcSMatt Macy dnl # 153eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_alloc_queue() expects request function]) 154eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_alloc_queue_request_fn], [ 1557877fdebSMatt Macy AC_MSG_RESULT(yes) 1567877fdebSMatt Macy 1577877fdebSMatt Macy dnl # This is currently always the case. 158eda14cbcSMatt Macy AC_MSG_CHECKING([whether make_request_fn() returns blk_qc_t]) 159eda14cbcSMatt Macy AC_MSG_RESULT(yes) 160eda14cbcSMatt Macy 161eda14cbcSMatt Macy AC_DEFINE(HAVE_BLK_ALLOC_QUEUE_REQUEST_FN, 1, 162eda14cbcSMatt Macy [blk_alloc_queue() expects request function]) 163eda14cbcSMatt Macy AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t, 164eda14cbcSMatt Macy [make_request_fn() return type]) 165eda14cbcSMatt Macy AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1, 166eda14cbcSMatt Macy [Noting that make_request_fn() returns blk_qc_t]) 167eda14cbcSMatt Macy ],[ 168eda14cbcSMatt Macy dnl # 1697877fdebSMatt Macy dnl # CentOS Stream 4.18.0-257 API Change 1707877fdebSMatt Macy dnl # The Linux 5.7 blk_alloc_queue() change was back- 1717877fdebSMatt Macy dnl # ported and the symbol renamed blk_alloc_queue_rh(). 1727877fdebSMatt Macy dnl # As of this kernel version they're not providing 1737877fdebSMatt Macy dnl # any compatibility code in the kernel for this. 1747877fdebSMatt Macy dnl # 1757877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([blk_alloc_queue_request_fn_rh], [ 1767877fdebSMatt Macy AC_MSG_RESULT(yes) 1777877fdebSMatt Macy 1787877fdebSMatt Macy dnl # This is currently always the case. 1797877fdebSMatt Macy AC_MSG_CHECKING([whether make_request_fn_rh() returns blk_qc_t]) 1807877fdebSMatt Macy AC_MSG_RESULT(yes) 1817877fdebSMatt Macy 1827877fdebSMatt Macy AC_DEFINE(HAVE_BLK_ALLOC_QUEUE_REQUEST_FN_RH, 1, 1837877fdebSMatt Macy [blk_alloc_queue_rh() expects request function]) 1847877fdebSMatt Macy AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t, 1857877fdebSMatt Macy [make_request_fn() return type]) 1867877fdebSMatt Macy AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1, 1877877fdebSMatt Macy [Noting that make_request_fn() returns blk_qc_t]) 1887877fdebSMatt Macy ],[ 1897877fdebSMatt Macy AC_MSG_RESULT(no) 1907877fdebSMatt Macy 1917877fdebSMatt Macy dnl # 192eda14cbcSMatt Macy dnl # Linux 4.4 API Change 193eda14cbcSMatt Macy dnl # make_request_fn returns blk_qc_t. 194eda14cbcSMatt Macy dnl # 195eda14cbcSMatt Macy AC_MSG_CHECKING( 196eda14cbcSMatt Macy [whether make_request_fn() returns blk_qc_t]) 197eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([make_request_fn_blk_qc_t], [ 198eda14cbcSMatt Macy AC_MSG_RESULT(yes) 199eda14cbcSMatt Macy AC_DEFINE(MAKE_REQUEST_FN_RET, blk_qc_t, 200eda14cbcSMatt Macy [make_request_fn() return type]) 201eda14cbcSMatt Macy AC_DEFINE(HAVE_MAKE_REQUEST_FN_RET_QC, 1, 202eda14cbcSMatt Macy [Noting that make_request_fn() ] 203eda14cbcSMatt Macy [returns blk_qc_t]) 204eda14cbcSMatt Macy ],[ 205eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([make_request_fn]) 206eda14cbcSMatt Macy ]) 207eda14cbcSMatt Macy ]) 208eda14cbcSMatt Macy ]) 209eda14cbcSMatt Macy ]) 210eda14cbcSMatt Macy]) 211