1dnl # SPDX-License-Identifier: CDDL-1.0 2dnl # 3dnl # 2.6.39 API change, 4dnl # blk_start_plug() and blk_finish_plug() 5dnl # 6AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG], [ 7 ZFS_LINUX_TEST_SRC([blk_plug], [ 8 #include <linux/blkdev.h> 9 ],[ 10 struct blk_plug plug __attribute__ ((unused)); 11 12 blk_start_plug(&plug); 13 blk_finish_plug(&plug); 14 ]) 15]) 16 17AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_PLUG], [ 18 AC_MSG_CHECKING([whether struct blk_plug is available]) 19 ZFS_LINUX_TEST_RESULT([blk_plug], [ 20 AC_MSG_RESULT(yes) 21 ],[ 22 ZFS_LINUX_TEST_ERROR([blk_plug]) 23 ]) 24]) 25 26dnl # 27dnl # 2.6.32 - 4.11: statically allocated bdi in request_queue 28dnl # 4.12: dynamically allocated bdi in request_queue 29dnl # 6.11: bdi no longer available through request_queue, so get it from 30dnl # the gendisk attached to the queue 31dnl # 32AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI], [ 33 ZFS_LINUX_TEST_SRC([blk_queue_bdi], [ 34 #include <linux/blkdev.h> 35 ],[ 36 struct request_queue q; 37 struct backing_dev_info bdi; 38 q.backing_dev_info = &bdi; 39 ]) 40]) 41 42AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_BDI], [ 43 AC_MSG_CHECKING([whether blk_queue bdi is dynamic]) 44 ZFS_LINUX_TEST_RESULT([blk_queue_bdi], [ 45 AC_MSG_RESULT(yes) 46 AC_DEFINE(HAVE_BLK_QUEUE_BDI_DYNAMIC, 1, 47 [blk queue backing_dev_info is dynamic]) 48 ],[ 49 AC_MSG_RESULT(no) 50 ]) 51]) 52 53AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI], [ 54 ZFS_LINUX_TEST_SRC([blk_queue_disk_bdi], [ 55 #include <linux/blkdev.h> 56 #include <linux/backing-dev.h> 57 ], [ 58 struct request_queue q; 59 struct gendisk disk; 60 struct backing_dev_info bdi __attribute__ ((unused)); 61 q.disk = &disk; 62 q.disk->bdi = &bdi; 63 ]) 64]) 65 66AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI], [ 67 AC_MSG_CHECKING([whether backing_dev_info is available through queue gendisk]) 68 ZFS_LINUX_TEST_RESULT([blk_queue_disk_bdi], [ 69 AC_MSG_RESULT(yes) 70 AC_DEFINE(HAVE_BLK_QUEUE_DISK_BDI, 1, 71 [backing_dev_info is available through queue gendisk]) 72 ],[ 73 AC_MSG_RESULT(no) 74 ]) 75]) 76 77dnl # 78dnl # 5.9: added blk_queue_update_readahead(), 79dnl # 5.15: renamed to disk_update_readahead() 80dnl # 81AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD], [ 82 ZFS_LINUX_TEST_SRC([blk_queue_update_readahead], [ 83 #include <linux/blkdev.h> 84 ],[ 85 struct request_queue q; 86 blk_queue_update_readahead(&q); 87 ]) 88 89 ZFS_LINUX_TEST_SRC([disk_update_readahead], [ 90 #include <linux/blkdev.h> 91 ],[ 92 struct gendisk disk; 93 disk_update_readahead(&disk); 94 ]) 95]) 96 97AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ 98 AC_MSG_CHECKING([whether blk_queue_update_readahead() exists]) 99 ZFS_LINUX_TEST_RESULT([blk_queue_update_readahead], [ 100 AC_MSG_RESULT(yes) 101 AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1, 102 [blk_queue_update_readahead() exists]) 103 ],[ 104 AC_MSG_RESULT(no) 105 106 AC_MSG_CHECKING([whether disk_update_readahead() exists]) 107 ZFS_LINUX_TEST_RESULT([disk_update_readahead], [ 108 AC_MSG_RESULT(yes) 109 AC_DEFINE(HAVE_DISK_UPDATE_READAHEAD, 1, 110 [disk_update_readahead() exists]) 111 ],[ 112 AC_MSG_RESULT(no) 113 ]) 114 ]) 115]) 116 117dnl # 118dnl # 5.19: bdev_max_discard_sectors() available 119dnl # 2.6.32: blk_queue_discard() available 120dnl # 121AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ 122 ZFS_LINUX_TEST_SRC([bdev_max_discard_sectors], [ 123 #include <linux/blkdev.h> 124 ],[ 125 struct block_device *bdev __attribute__ ((unused)) = NULL; 126 unsigned int error __attribute__ ((unused)); 127 128 error = bdev_max_discard_sectors(bdev); 129 ]) 130 131 ZFS_LINUX_TEST_SRC([blk_queue_discard], [ 132 #include <linux/blkdev.h> 133 ],[ 134 struct request_queue r; 135 struct request_queue *q = &r; 136 int value __attribute__ ((unused)); 137 memset(q, 0, sizeof(r)); 138 value = blk_queue_discard(q); 139 ],[-Wframe-larger-than=8192]) 140]) 141 142AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [ 143 AC_MSG_CHECKING([whether bdev_max_discard_sectors() is available]) 144 ZFS_LINUX_TEST_RESULT([bdev_max_discard_sectors], [ 145 AC_MSG_RESULT(yes) 146 AC_DEFINE(HAVE_BDEV_MAX_DISCARD_SECTORS, 1, 147 [bdev_max_discard_sectors() is available]) 148 ],[ 149 AC_MSG_RESULT(no) 150 151 AC_MSG_CHECKING([whether blk_queue_discard() is available]) 152 ZFS_LINUX_TEST_RESULT([blk_queue_discard], [ 153 AC_MSG_RESULT(yes) 154 AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1, 155 [blk_queue_discard() is available]) 156 ],[ 157 ZFS_LINUX_TEST_ERROR([blk_queue_discard]) 158 ]) 159 ]) 160]) 161 162dnl # 163dnl # 5.19: bdev_max_secure_erase_sectors() available 164dnl # 4.8: blk_queue_secure_erase() available 165dnl # 166AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [ 167 ZFS_LINUX_TEST_SRC([bdev_max_secure_erase_sectors], [ 168 #include <linux/blkdev.h> 169 ],[ 170 struct block_device *bdev __attribute__ ((unused)) = NULL; 171 unsigned int error __attribute__ ((unused)); 172 173 error = bdev_max_secure_erase_sectors(bdev); 174 ]) 175 176 ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [ 177 #include <linux/blkdev.h> 178 ],[ 179 struct request_queue r; 180 struct request_queue *q = &r; 181 int value __attribute__ ((unused)); 182 memset(q, 0, sizeof(r)); 183 value = blk_queue_secure_erase(q); 184 ],[-Wframe-larger-than=8192]) 185]) 186 187AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE], [ 188 AC_MSG_CHECKING([whether bdev_max_secure_erase_sectors() is available]) 189 ZFS_LINUX_TEST_RESULT([bdev_max_secure_erase_sectors], [ 190 AC_MSG_RESULT(yes) 191 AC_DEFINE(HAVE_BDEV_MAX_SECURE_ERASE_SECTORS, 1, 192 [bdev_max_secure_erase_sectors() is available]) 193 ],[ 194 AC_MSG_RESULT(no) 195 196 AC_MSG_CHECKING([whether blk_queue_secure_erase() is available]) 197 ZFS_LINUX_TEST_RESULT([blk_queue_secure_erase], [ 198 AC_MSG_RESULT(yes) 199 AC_DEFINE(HAVE_BLK_QUEUE_SECURE_ERASE, 1, 200 [blk_queue_secure_erase() is available]) 201 ],[ 202 ZFS_LINUX_TEST_ERROR([blk_queue_secure_erase]) 203 ]) 204 ]) 205]) 206 207dnl # 208dnl # 2.6.34 API change 209dnl # blk_queue_max_hw_sectors() replaces blk_queue_max_sectors(). 210dnl # 211AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS], [ 212 ZFS_LINUX_TEST_SRC([blk_queue_max_hw_sectors], [ 213 #include <linux/blkdev.h> 214 ], [ 215 struct request_queue *q __attribute__ ((unused)) = NULL; 216 (void) blk_queue_max_hw_sectors(q, BLK_SAFE_MAX_SECTORS); 217 ], []) 218]) 219 220AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS], [ 221 AC_MSG_CHECKING([whether blk_queue_max_hw_sectors() is available]) 222 ZFS_LINUX_TEST_RESULT([blk_queue_max_hw_sectors], [ 223 AC_MSG_RESULT(yes) 224 ],[ 225 AC_MSG_RESULT(no) 226 ]) 227]) 228 229dnl # 230dnl # 7.0 API change 231dnl # blk_queue_rot() replaces blk_queue_nonrot() (inverted meaning) 232dnl # 233AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_ROT], [ 234 ZFS_LINUX_TEST_SRC([blk_queue_rot], [ 235 #include <linux/blkdev.h> 236 ], [ 237 struct request_queue *q __attribute__ ((unused)) = NULL; 238 (void) blk_queue_rot(q); 239 ], []) 240]) 241 242AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_ROT], [ 243 AC_MSG_CHECKING([whether blk_queue_rot() is available]) 244 ZFS_LINUX_TEST_RESULT([blk_queue_rot], [ 245 AC_MSG_RESULT(yes) 246 AC_DEFINE(HAVE_BLK_QUEUE_ROT, 1, 247 [blk_queue_rot() is available]) 248 ],[ 249 AC_MSG_RESULT(no) 250 ]) 251]) 252 253dnl # 254dnl # 2.6.34 API change 255dnl # blk_queue_max_segments() consolidates blk_queue_max_hw_segments() 256dnl # and blk_queue_max_phys_segments(). 257dnl # 258AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS], [ 259 ZFS_LINUX_TEST_SRC([blk_queue_max_segments], [ 260 #include <linux/blkdev.h> 261 ], [ 262 struct request_queue *q __attribute__ ((unused)) = NULL; 263 (void) blk_queue_max_segments(q, BLK_MAX_SEGMENTS); 264 ], []) 265]) 266 267AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS], [ 268 AC_MSG_CHECKING([whether blk_queue_max_segments() is available]) 269 ZFS_LINUX_TEST_RESULT([blk_queue_max_segments], [ 270 AC_MSG_RESULT(yes) 271 ], [ 272 AC_MSG_RESULT(no) 273 ]) 274]) 275 276AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX], [ 277 ZFS_LINUX_TEST_SRC([blk_mq_rq_hctx], [ 278 #include <linux/blk-mq.h> 279 #include <linux/blkdev.h> 280 ], [ 281 struct request rq = {0}; 282 struct blk_mq_hw_ctx *hctx = NULL; 283 rq.mq_hctx = hctx; 284 ], []) 285]) 286 287AC_DEFUN([ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX], [ 288 AC_MSG_CHECKING([whether block multiqueue hardware context is cached in struct request]) 289 ZFS_LINUX_TEST_RESULT([blk_mq_rq_hctx], [ 290 AC_MSG_RESULT(yes) 291 AC_DEFINE(HAVE_BLK_MQ_RQ_HCTX, 1, [block multiqueue hardware context is cached in struct request]) 292 ], [ 293 AC_MSG_RESULT(no) 294 ]) 295]) 296 297AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [ 298 ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG 299 ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI 300 ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISK_BDI 301 ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD 302 ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD 303 ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE 304 ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_HW_SECTORS 305 ZFS_AC_KERNEL_SRC_BLK_QUEUE_MAX_SEGMENTS 306 ZFS_AC_KERNEL_SRC_BLK_QUEUE_ROT 307 ZFS_AC_KERNEL_SRC_BLK_MQ_RQ_HCTX 308]) 309 310AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE], [ 311 ZFS_AC_KERNEL_BLK_QUEUE_PLUG 312 ZFS_AC_KERNEL_BLK_QUEUE_BDI 313 ZFS_AC_KERNEL_BLK_QUEUE_DISK_BDI 314 ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD 315 ZFS_AC_KERNEL_BLK_QUEUE_DISCARD 316 ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE 317 ZFS_AC_KERNEL_BLK_QUEUE_MAX_HW_SECTORS 318 ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS 319 ZFS_AC_KERNEL_BLK_QUEUE_ROT 320 ZFS_AC_KERNEL_BLK_MQ_RQ_HCTX 321]) 322