1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # 2.6.39 API change, 3eda14cbcSMatt Macydnl # blk_start_plug() and blk_finish_plug() 4eda14cbcSMatt Macydnl # 5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG], [ 6eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_plug], [ 7eda14cbcSMatt Macy #include <linux/blkdev.h> 8eda14cbcSMatt Macy ],[ 9eda14cbcSMatt Macy struct blk_plug plug __attribute__ ((unused)); 10eda14cbcSMatt Macy 11eda14cbcSMatt Macy blk_start_plug(&plug); 12eda14cbcSMatt Macy blk_finish_plug(&plug); 13eda14cbcSMatt Macy ]) 14eda14cbcSMatt Macy]) 15eda14cbcSMatt Macy 16eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_PLUG], [ 17eda14cbcSMatt Macy AC_MSG_CHECKING([whether struct blk_plug is available]) 18eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_plug], [ 19eda14cbcSMatt Macy AC_MSG_RESULT(yes) 20eda14cbcSMatt Macy ],[ 21eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blk_plug]) 22eda14cbcSMatt Macy ]) 23eda14cbcSMatt Macy]) 24eda14cbcSMatt Macy 25eda14cbcSMatt Macydnl # 2616038816SMartin Matuskadnl # 2.6.32 - 4.11: statically allocated bdi in request_queue 2716038816SMartin Matuskadnl # 4.12: dynamically allocated bdi in request_queue 2829dc9349SMartin Matuskadnl # 6.11: bdi no longer available through request_queue, so get it from 2929dc9349SMartin Matuskadnl # the gendisk attached to the queue 30eda14cbcSMatt Macydnl # 31eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI], [ 32eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_queue_bdi], [ 33eda14cbcSMatt Macy #include <linux/blkdev.h> 34eda14cbcSMatt Macy ],[ 35eda14cbcSMatt Macy struct request_queue q; 36eda14cbcSMatt Macy struct backing_dev_info bdi; 37eda14cbcSMatt Macy q.backing_dev_info = &bdi; 38eda14cbcSMatt Macy ]) 39eda14cbcSMatt Macy]) 40eda14cbcSMatt Macy 41eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_BDI], [ 42eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_queue bdi is dynamic]) 43eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_queue_bdi], [ 44eda14cbcSMatt Macy AC_MSG_RESULT(yes) 45eda14cbcSMatt Macy AC_DEFINE(HAVE_BLK_QUEUE_BDI_DYNAMIC, 1, 46eda14cbcSMatt Macy [blk queue backing_dev_info is dynamic]) 47eda14cbcSMatt Macy ],[ 48eda14cbcSMatt Macy AC_MSG_RESULT(no) 49eda14cbcSMatt Macy ]) 50eda14cbcSMatt Macy]) 51eda14cbcSMatt Macy 5229dc9349SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI], [ 5329dc9349SMartin Matuska ZFS_LINUX_TEST_SRC([blk_queue_disk_bdi], [ 5429dc9349SMartin Matuska #include <linux/blkdev.h> 5529dc9349SMartin Matuska #include <linux/backing-dev.h> 5629dc9349SMartin Matuska ], [ 5729dc9349SMartin Matuska struct request_queue q; 5829dc9349SMartin Matuska struct gendisk disk; 5929dc9349SMartin Matuska struct backing_dev_info bdi __attribute__ ((unused)); 6029dc9349SMartin Matuska q.disk = &disk; 6129dc9349SMartin Matuska q.disk->bdi = &bdi; 6229dc9349SMartin Matuska ]) 6329dc9349SMartin Matuska]) 6429dc9349SMartin Matuska 6529dc9349SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI], [ 6629dc9349SMartin Matuska AC_MSG_CHECKING([whether backing_dev_info is available through queue gendisk]) 6729dc9349SMartin Matuska ZFS_LINUX_TEST_RESULT([blk_queue_disk_bdi], [ 6829dc9349SMartin Matuska AC_MSG_RESULT(yes) 6929dc9349SMartin Matuska AC_DEFINE(HAVE_BLK_QUEUE_DISK_BDI, 1, 7029dc9349SMartin Matuska [backing_dev_info is available through queue gendisk]) 7129dc9349SMartin Matuska ],[ 7229dc9349SMartin Matuska AC_MSG_RESULT(no) 7329dc9349SMartin Matuska ]) 7429dc9349SMartin Matuska]) 7529dc9349SMartin Matuska 76eda14cbcSMatt Macydnl # 7753b70c86SMartin Matuskadnl # 5.9: added blk_queue_update_readahead(), 7853b70c86SMartin Matuskadnl # 5.15: renamed to disk_update_readahead() 7953b70c86SMartin Matuskadnl # 8053b70c86SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD], [ 8153b70c86SMartin Matuska ZFS_LINUX_TEST_SRC([blk_queue_update_readahead], [ 8253b70c86SMartin Matuska #include <linux/blkdev.h> 8353b70c86SMartin Matuska ],[ 8453b70c86SMartin Matuska struct request_queue q; 8553b70c86SMartin Matuska blk_queue_update_readahead(&q); 8653b70c86SMartin Matuska ]) 8753b70c86SMartin Matuska 8853b70c86SMartin Matuska ZFS_LINUX_TEST_SRC([disk_update_readahead], [ 8953b70c86SMartin Matuska #include <linux/blkdev.h> 9053b70c86SMartin Matuska ],[ 9153b70c86SMartin Matuska struct gendisk disk; 9253b70c86SMartin Matuska disk_update_readahead(&disk); 9353b70c86SMartin Matuska ]) 9453b70c86SMartin Matuska]) 9553b70c86SMartin Matuska 9653b70c86SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ 9753b70c86SMartin Matuska AC_MSG_CHECKING([whether blk_queue_update_readahead() exists]) 9853b70c86SMartin Matuska ZFS_LINUX_TEST_RESULT([blk_queue_update_readahead], [ 9953b70c86SMartin Matuska AC_MSG_RESULT(yes) 10053b70c86SMartin Matuska AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1, 10153b70c86SMartin Matuska [blk_queue_update_readahead() exists]) 10253b70c86SMartin Matuska ],[ 103e3aa18adSMartin Matuska AC_MSG_RESULT(no) 104e3aa18adSMartin Matuska 10553b70c86SMartin Matuska AC_MSG_CHECKING([whether disk_update_readahead() exists]) 10653b70c86SMartin Matuska ZFS_LINUX_TEST_RESULT([disk_update_readahead], [ 10753b70c86SMartin Matuska AC_MSG_RESULT(yes) 10853b70c86SMartin Matuska AC_DEFINE(HAVE_DISK_UPDATE_READAHEAD, 1, 10953b70c86SMartin Matuska [disk_update_readahead() exists]) 11053b70c86SMartin Matuska ],[ 11153b70c86SMartin Matuska AC_MSG_RESULT(no) 11253b70c86SMartin Matuska ]) 11353b70c86SMartin Matuska ]) 11453b70c86SMartin Matuska]) 11553b70c86SMartin Matuska 11653b70c86SMartin Matuskadnl # 117e3aa18adSMartin Matuskadnl # 5.19: bdev_max_discard_sectors() available 118e3aa18adSMartin Matuskadnl # 2.6.32: blk_queue_discard() available 119eda14cbcSMatt Macydnl # 120eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ 121e3aa18adSMartin Matuska ZFS_LINUX_TEST_SRC([bdev_max_discard_sectors], [ 122e3aa18adSMartin Matuska #include <linux/blkdev.h> 123e3aa18adSMartin Matuska ],[ 124e3aa18adSMartin Matuska struct block_device *bdev __attribute__ ((unused)) = NULL; 125e3aa18adSMartin Matuska unsigned int error __attribute__ ((unused)); 126e3aa18adSMartin Matuska 127e3aa18adSMartin Matuska error = bdev_max_discard_sectors(bdev); 128e3aa18adSMartin Matuska ]) 129e3aa18adSMartin Matuska 130eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_queue_discard], [ 131eda14cbcSMatt Macy #include <linux/blkdev.h> 132eda14cbcSMatt Macy ],[ 133716fd348SMartin Matuska struct request_queue r; 134716fd348SMartin Matuska struct request_queue *q = &r; 135eda14cbcSMatt Macy int value __attribute__ ((unused)); 136716fd348SMartin Matuska memset(q, 0, sizeof(r)); 137eda14cbcSMatt Macy value = blk_queue_discard(q); 1382a58b312SMartin Matuska ],[-Wframe-larger-than=8192]) 139eda14cbcSMatt Macy]) 140eda14cbcSMatt Macy 141eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [ 142e3aa18adSMartin Matuska AC_MSG_CHECKING([whether bdev_max_discard_sectors() is available]) 143e3aa18adSMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_max_discard_sectors], [ 144e3aa18adSMartin Matuska AC_MSG_RESULT(yes) 145e3aa18adSMartin Matuska AC_DEFINE(HAVE_BDEV_MAX_DISCARD_SECTORS, 1, 146e3aa18adSMartin Matuska [bdev_max_discard_sectors() is available]) 147e3aa18adSMartin Matuska ],[ 148e3aa18adSMartin Matuska AC_MSG_RESULT(no) 149e3aa18adSMartin Matuska 150eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_queue_discard() is available]) 151eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_queue_discard], [ 152eda14cbcSMatt Macy AC_MSG_RESULT(yes) 153e3aa18adSMartin Matuska AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1, 154e3aa18adSMartin Matuska [blk_queue_discard() is available]) 155eda14cbcSMatt Macy ],[ 156eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blk_queue_discard]) 157eda14cbcSMatt Macy ]) 158eda14cbcSMatt Macy ]) 159e3aa18adSMartin Matuska]) 160eda14cbcSMatt Macy 161eda14cbcSMatt Macydnl # 162e3aa18adSMartin Matuskadnl # 5.19: bdev_max_secure_erase_sectors() available 163e3aa18adSMartin Matuskadnl # 4.8: blk_queue_secure_erase() available 164eda14cbcSMatt Macydnl # 165eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [ 166e3aa18adSMartin Matuska ZFS_LINUX_TEST_SRC([bdev_max_secure_erase_sectors], [ 167e3aa18adSMartin Matuska #include <linux/blkdev.h> 168e3aa18adSMartin Matuska ],[ 169e3aa18adSMartin Matuska struct block_device *bdev __attribute__ ((unused)) = NULL; 170e3aa18adSMartin Matuska unsigned int error __attribute__ ((unused)); 171e3aa18adSMartin Matuska 172e3aa18adSMartin Matuska error = bdev_max_secure_erase_sectors(bdev); 173e3aa18adSMartin Matuska ]) 174e3aa18adSMartin Matuska 175eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [ 176eda14cbcSMatt Macy #include <linux/blkdev.h> 177eda14cbcSMatt Macy ],[ 178716fd348SMartin Matuska struct request_queue r; 179716fd348SMartin Matuska struct request_queue *q = &r; 180eda14cbcSMatt Macy int value __attribute__ ((unused)); 181716fd348SMartin Matuska memset(q, 0, sizeof(r)); 182eda14cbcSMatt Macy value = blk_queue_secure_erase(q); 1832a58b312SMartin Matuska ],[-Wframe-larger-than=8192]) 184eda14cbcSMatt Macy]) 185eda14cbcSMatt Macy 186eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE], [ 187e3aa18adSMartin Matuska AC_MSG_CHECKING([whether bdev_max_secure_erase_sectors() is available]) 188e3aa18adSMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_max_secure_erase_sectors], [ 189e3aa18adSMartin Matuska AC_MSG_RESULT(yes) 190e3aa18adSMartin Matuska AC_DEFINE(HAVE_BDEV_MAX_SECURE_ERASE_SECTORS, 1, 191e3aa18adSMartin Matuska [bdev_max_secure_erase_sectors() is available]) 192e3aa18adSMartin Matuska ],[ 193e3aa18adSMartin Matuska AC_MSG_RESULT(no) 194e3aa18adSMartin Matuska 195eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_queue_secure_erase() is available]) 196eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_queue_secure_erase], [ 197eda14cbcSMatt Macy AC_MSG_RESULT(yes) 198eda14cbcSMatt Macy AC_DEFINE(HAVE_BLK_QUEUE_SECURE_ERASE, 1, 199eda14cbcSMatt Macy [blk_queue_secure_erase() is available]) 200eda14cbcSMatt Macy ],[ 201eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blk_queue_secure_erase]) 202eda14cbcSMatt Macy ]) 203eda14cbcSMatt Macy ]) 204eda14cbcSMatt Macy]) 205eda14cbcSMatt Macy 206eda14cbcSMatt Macydnl # 207eda14cbcSMatt Macydnl # 2.6.34 API change 208eda14cbcSMatt Macydnl # blk_queue_max_hw_sectors() replaces blk_queue_max_sectors(). 209eda14cbcSMatt Macydnl # 210eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS], [ 211eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_queue_max_hw_sectors], [ 212eda14cbcSMatt Macy #include <linux/blkdev.h> 213eda14cbcSMatt Macy ], [ 214c03c5b1cSMartin Matuska struct request_queue *q __attribute__ ((unused)) = NULL; 215eda14cbcSMatt Macy (void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS); 216c03c5b1cSMartin Matuska ], []) 217eda14cbcSMatt Macy]) 218eda14cbcSMatt Macy 219eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS], [ 220eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_queue_max_hw_sectors() is available]) 221eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_queue_max_hw_sectors], [ 222eda14cbcSMatt Macy AC_MSG_RESULT(yes) 223eda14cbcSMatt Macy ],[ 22475e1fea6SMartin Matuska AC_MSG_RESULT(no) 225eda14cbcSMatt Macy ]) 226eda14cbcSMatt Macy]) 227eda14cbcSMatt Macy 228eda14cbcSMatt Macydnl # 229eda14cbcSMatt Macydnl # 2.6.34 API change 230eda14cbcSMatt Macydnl # blk_queue_max_segments() consolidates blk_queue_max_hw_segments() 231eda14cbcSMatt Macydnl # and blk_queue_max_phys_segments(). 232eda14cbcSMatt Macydnl # 233eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS], [ 234eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blk_queue_max_segments], [ 235eda14cbcSMatt Macy #include <linux/blkdev.h> 236eda14cbcSMatt Macy ], [ 237c03c5b1cSMartin Matuska struct request_queue *q __attribute__ ((unused)) = NULL; 238eda14cbcSMatt Macy (void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS); 239c03c5b1cSMartin Matuska ], []) 240eda14cbcSMatt Macy]) 241eda14cbcSMatt Macy 242eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS], [ 243eda14cbcSMatt Macy AC_MSG_CHECKING([whether blk_queue_max_segments() is available]) 244eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blk_queue_max_segments], [ 245eda14cbcSMatt Macy AC_MSG_RESULT(yes) 246eda14cbcSMatt Macy ], [ 24775e1fea6SMartin Matuska AC_MSG_RESULT(no) 248eda14cbcSMatt Macy ]) 249eda14cbcSMatt Macy]) 250eda14cbcSMatt Macy 251*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX], [ 2521719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blk_mq_rq_hctx], [ 2531719886fSMartin Matuska #include <linux/blk-mq.h> 2541719886fSMartin Matuska #include <linux/blkdev.h> 2551719886fSMartin Matuska ], [ 2561719886fSMartin Matuska struct request rq = {0}; 2571719886fSMartin Matuska struct blk_mq_hw_ctx *hctx = NULL; 2581719886fSMartin Matuska rq.mq_hctx = hctx; 2591719886fSMartin Matuska ], []) 2601f1e2261SMartin Matuska]) 2611f1e2261SMartin Matuska 262*7a7741afSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX], [ 2631719886fSMartin Matuska AC_MSG_CHECKING([whether block multiqueue hardware context is cached in struct request]) 2641719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_mq_rq_hctx], [ 2651719886fSMartin Matuska AC_MSG_RESULT(yes) 2661719886fSMartin Matuska AC_DEFINE(HAVE_BLK_MQ_RQ_HCTX, 1, [block multiqueue hardware context is cached in struct request]) 2671719886fSMartin Matuska ], [ 2681719886fSMartin Matuska AC_MSG_RESULT(no) 2691719886fSMartin Matuska ]) 2701f1e2261SMartin Matuska]) 2711f1e2261SMartin Matuska 272eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [ 273eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG 274eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI 27529dc9349SMartin Matuska ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI 27653b70c86SMartin Matuska ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD 277eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD 278eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE 279eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS 280eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS 281*7a7741afSMartin Matuska ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX 282eda14cbcSMatt Macy]) 283eda14cbcSMatt Macy 284eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE], [ 285eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_PLUG 286eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_BDI 28729dc9349SMartin Matuska ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI 28853b70c86SMartin Matuska ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD 289eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_DISCARD 290eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE 291eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS 292eda14cbcSMatt Macy ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS 293*7a7741afSMartin Matuska ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX 294eda14cbcSMatt Macy]) 295