1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # 2.6.38 API change, 3eda14cbcSMatt Macydnl # Added blkdev_get_by_path() 4eda14cbcSMatt Macydnl # 5eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH], [ 6eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_get_by_path], [ 7eda14cbcSMatt Macy #include <linux/fs.h> 8eda14cbcSMatt Macy #include <linux/blkdev.h> 9eda14cbcSMatt Macy ], [ 10eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 11eda14cbcSMatt Macy const char *path = "path"; 12eda14cbcSMatt Macy fmode_t mode = 0; 13eda14cbcSMatt Macy void *holder = NULL; 14eda14cbcSMatt Macy 15eda14cbcSMatt Macy bdev = blkdev_get_by_path(path, mode, holder); 16eda14cbcSMatt Macy ]) 17eda14cbcSMatt Macy]) 18eda14cbcSMatt Macy 19315ee00fSMartin Matuskadnl # 20315ee00fSMartin Matuskadnl # 6.5.x API change, 21315ee00fSMartin Matuskadnl # blkdev_get_by_path() takes 4 args 22315ee00fSMartin Matuskadnl # 23315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG], [ 24315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_get_by_path_4arg], [ 25315ee00fSMartin Matuska #include <linux/fs.h> 26315ee00fSMartin Matuska #include <linux/blkdev.h> 27315ee00fSMartin Matuska ], [ 28315ee00fSMartin Matuska struct block_device *bdev __attribute__ ((unused)) = NULL; 29315ee00fSMartin Matuska const char *path = "path"; 30315ee00fSMartin Matuska fmode_t mode = 0; 31315ee00fSMartin Matuska void *holder = NULL; 32315ee00fSMartin Matuska struct blk_holder_ops h; 33315ee00fSMartin Matuska 34315ee00fSMartin Matuska bdev = blkdev_get_by_path(path, mode, holder, &h); 35315ee00fSMartin Matuska ]) 36315ee00fSMartin Matuska]) 37315ee00fSMartin Matuska 38fd45b686SMartin Matuskadnl # 39fd45b686SMartin Matuskadnl # 6.8.x API change 40fd45b686SMartin Matuskadnl # bdev_open_by_path() replaces blkdev_get_by_path() 41fd45b686SMartin Matuskadnl # 42fd45b686SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH], [ 43fd45b686SMartin Matuska ZFS_LINUX_TEST_SRC([bdev_open_by_path], [ 44fd45b686SMartin Matuska #include <linux/fs.h> 45fd45b686SMartin Matuska #include <linux/blkdev.h> 46fd45b686SMartin Matuska ], [ 47fd45b686SMartin Matuska struct bdev_handle *bdh __attribute__ ((unused)) = NULL; 48fd45b686SMartin Matuska const char *path = "path"; 49fd45b686SMartin Matuska fmode_t mode = 0; 50fd45b686SMartin Matuska void *holder = NULL; 51fd45b686SMartin Matuska struct blk_holder_ops h; 52fd45b686SMartin Matuska 53fd45b686SMartin Matuska bdh = bdev_open_by_path(path, mode, holder, &h); 54fd45b686SMartin Matuska ]) 55fd45b686SMartin Matuska]) 56fd45b686SMartin Matuska 571719886fSMartin Matuskadnl # 581719886fSMartin Matuskadnl # 6.9.x API change 591719886fSMartin Matuskadnl # bdev_file_open_by_path() replaced bdev_open_by_path(), 601719886fSMartin Matuskadnl # and returns struct file* 611719886fSMartin Matuskadnl # 621719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH], [ 631719886fSMartin Matuska ZFS_LINUX_TEST_SRC([bdev_file_open_by_path], [ 641719886fSMartin Matuska #include <linux/fs.h> 651719886fSMartin Matuska #include <linux/blkdev.h> 661719886fSMartin Matuska ], [ 671719886fSMartin Matuska struct file *file __attribute__ ((unused)) = NULL; 681719886fSMartin Matuska const char *path = "path"; 691719886fSMartin Matuska fmode_t mode = 0; 701719886fSMartin Matuska void *holder = NULL; 711719886fSMartin Matuska struct blk_holder_ops h; 721719886fSMartin Matuska 731719886fSMartin Matuska file = bdev_file_open_by_path(path, mode, holder, &h); 741719886fSMartin Matuska ]) 751719886fSMartin Matuska]) 761719886fSMartin Matuska 77eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [ 78315ee00fSMartin Matuska AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 3 args]) 79eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [ 80eda14cbcSMatt Macy AC_MSG_RESULT(yes) 81eda14cbcSMatt Macy ], [ 82315ee00fSMartin Matuska AC_MSG_RESULT(no) 83315ee00fSMartin Matuska AC_MSG_CHECKING([whether blkdev_get_by_path() exists and takes 4 args]) 84315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_get_by_path_4arg], [ 85315ee00fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_GET_BY_PATH_4ARG, 1, 86315ee00fSMartin Matuska [blkdev_get_by_path() exists and takes 4 args]) 87315ee00fSMartin Matuska AC_MSG_RESULT(yes) 88315ee00fSMartin Matuska ], [ 89fd45b686SMartin Matuska AC_MSG_RESULT(no) 90fd45b686SMartin Matuska AC_MSG_CHECKING([whether bdev_open_by_path() exists]) 91fd45b686SMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_open_by_path], [ 92fd45b686SMartin Matuska AC_DEFINE(HAVE_BDEV_OPEN_BY_PATH, 1, 93fd45b686SMartin Matuska [bdev_open_by_path() exists]) 94fd45b686SMartin Matuska AC_MSG_RESULT(yes) 95fd45b686SMartin Matuska ], [ 961719886fSMartin Matuska AC_MSG_RESULT(no) 971719886fSMartin Matuska AC_MSG_CHECKING([whether bdev_file_open_by_path() exists]) 981719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_file_open_by_path], [ 991719886fSMartin Matuska AC_DEFINE(HAVE_BDEV_FILE_OPEN_BY_PATH, 1, 1001719886fSMartin Matuska [bdev_file_open_by_path() exists]) 1011719886fSMartin Matuska AC_MSG_RESULT(yes) 1021719886fSMartin Matuska ], [ 1031719886fSMartin Matuska AC_MSG_RESULT(no) 104eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()]) 105eda14cbcSMatt Macy ]) 106eda14cbcSMatt Macy ]) 107315ee00fSMartin Matuska ]) 108fd45b686SMartin Matuska ]) 1091719886fSMartin Matuska]) 110315ee00fSMartin Matuska 111315ee00fSMartin Matuskadnl # 112315ee00fSMartin Matuskadnl # 6.5.x API change 113315ee00fSMartin Matuskadnl # blk_mode_t was added as a type to supercede some places where fmode_t 114315ee00fSMartin Matuskadnl # is used 115315ee00fSMartin Matuskadnl # 116315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T], [ 117315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([blk_mode_t], [ 118315ee00fSMartin Matuska #include <linux/fs.h> 119315ee00fSMartin Matuska #include <linux/blkdev.h> 120315ee00fSMartin Matuska ], [ 121315ee00fSMartin Matuska blk_mode_t m __attribute((unused)) = (blk_mode_t)0; 122315ee00fSMartin Matuska ]) 123315ee00fSMartin Matuska]) 124315ee00fSMartin Matuska 125315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T], [ 126315ee00fSMartin Matuska AC_MSG_CHECKING([whether blk_mode_t is defined]) 127315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_mode_t], [ 128315ee00fSMartin Matuska AC_MSG_RESULT(yes) 129315ee00fSMartin Matuska AC_DEFINE(HAVE_BLK_MODE_T, 1, [blk_mode_t is defined]) 130315ee00fSMartin Matuska ], [ 131315ee00fSMartin Matuska AC_MSG_RESULT(no) 132315ee00fSMartin Matuska ]) 133315ee00fSMartin Matuska]) 134eda14cbcSMatt Macy 135eda14cbcSMatt Macydnl # 136eda14cbcSMatt Macydnl # 2.6.38 API change, 137eda14cbcSMatt Macydnl # Added blkdev_put() 138eda14cbcSMatt Macydnl # 139eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [ 140eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_put], [ 141eda14cbcSMatt Macy #include <linux/fs.h> 142eda14cbcSMatt Macy #include <linux/blkdev.h> 143eda14cbcSMatt Macy ], [ 144eda14cbcSMatt Macy struct block_device *bdev = NULL; 145eda14cbcSMatt Macy fmode_t mode = 0; 146eda14cbcSMatt Macy 147eda14cbcSMatt Macy blkdev_put(bdev, mode); 148eda14cbcSMatt Macy ]) 149eda14cbcSMatt Macy]) 150eda14cbcSMatt Macy 151315ee00fSMartin Matuskadnl # 152315ee00fSMartin Matuskadnl # 6.5.x API change. 153315ee00fSMartin Matuskadnl # blkdev_put() takes (void* holder) as arg 2 154315ee00fSMartin Matuskadnl # 155315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER], [ 156315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_put_holder], [ 157315ee00fSMartin Matuska #include <linux/fs.h> 158315ee00fSMartin Matuska #include <linux/blkdev.h> 159315ee00fSMartin Matuska ], [ 160315ee00fSMartin Matuska struct block_device *bdev = NULL; 161315ee00fSMartin Matuska void *holder = NULL; 162315ee00fSMartin Matuska 163315ee00fSMartin Matuska blkdev_put(bdev, holder); 164315ee00fSMartin Matuska ]) 165315ee00fSMartin Matuska]) 166315ee00fSMartin Matuska 167fd45b686SMartin Matuskadnl # 168fd45b686SMartin Matuskadnl # 6.8.x API change 169fd45b686SMartin Matuskadnl # bdev_release() replaces blkdev_put() 170fd45b686SMartin Matuskadnl # 171fd45b686SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE], [ 172fd45b686SMartin Matuska ZFS_LINUX_TEST_SRC([bdev_release], [ 173fd45b686SMartin Matuska #include <linux/fs.h> 174fd45b686SMartin Matuska #include <linux/blkdev.h> 175fd45b686SMartin Matuska ], [ 176fd45b686SMartin Matuska struct bdev_handle *bdh = NULL; 177fd45b686SMartin Matuska bdev_release(bdh); 178fd45b686SMartin Matuska ]) 179fd45b686SMartin Matuska]) 180fd45b686SMartin Matuska 1811719886fSMartin Matuskadnl # 1821719886fSMartin Matuskadnl # 6.9.x API change 1831719886fSMartin Matuskadnl # 1841719886fSMartin Matuskadnl # bdev_release() now private, but because bdev_file_open_by_path() returns 1851719886fSMartin Matuskadnl # struct file*, we can just use fput(). So the blkdev_put test no longer 1861719886fSMartin Matuskadnl # fails if not found. 1871719886fSMartin Matuskadnl # 1881719886fSMartin Matuska 189eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [ 190eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_put() exists]) 191eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_put], [ 192eda14cbcSMatt Macy AC_MSG_RESULT(yes) 1931719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_PUT, 1, [blkdev_put() exists]) 194eda14cbcSMatt Macy ], [ 195fd45b686SMartin Matuska AC_MSG_RESULT(no) 196315ee00fSMartin Matuska AC_MSG_CHECKING([whether blkdev_put() accepts void* as arg 2]) 197315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_put_holder], [ 198315ee00fSMartin Matuska AC_MSG_RESULT(yes) 199315ee00fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_PUT_HOLDER, 1, 200315ee00fSMartin Matuska [blkdev_put() accepts void* as arg 2]) 201315ee00fSMartin Matuska ], [ 202fd45b686SMartin Matuska AC_MSG_RESULT(no) 203fd45b686SMartin Matuska AC_MSG_CHECKING([whether bdev_release() exists]) 204fd45b686SMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_release], [ 205fd45b686SMartin Matuska AC_MSG_RESULT(yes) 206fd45b686SMartin Matuska AC_DEFINE(HAVE_BDEV_RELEASE, 1, 207fd45b686SMartin Matuska [bdev_release() exists]) 208fd45b686SMartin Matuska ], [ 2091719886fSMartin Matuska AC_MSG_RESULT(no) 210eda14cbcSMatt Macy ]) 211eda14cbcSMatt Macy ]) 212315ee00fSMartin Matuska ]) 213fd45b686SMartin Matuska]) 214eda14cbcSMatt Macy 215eda14cbcSMatt Macydnl # 216eda14cbcSMatt Macydnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the 217eda14cbcSMatt Macydnl # 3.10.0 CentOS 7.x enterprise kernels. 218eda14cbcSMatt Macydnl # 219eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [ 220eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_reread_part], [ 221eda14cbcSMatt Macy #include <linux/fs.h> 222eda14cbcSMatt Macy #include <linux/blkdev.h> 223eda14cbcSMatt Macy ], [ 224eda14cbcSMatt Macy struct block_device *bdev = NULL; 225eda14cbcSMatt Macy int error; 226eda14cbcSMatt Macy 227eda14cbcSMatt Macy error = blkdev_reread_part(bdev); 228eda14cbcSMatt Macy ]) 229eda14cbcSMatt Macy]) 230eda14cbcSMatt Macy 231eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [ 232eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_reread_part() exists]) 233eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [ 234eda14cbcSMatt Macy AC_MSG_RESULT(yes) 235eda14cbcSMatt Macy AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1, 236eda14cbcSMatt Macy [blkdev_reread_part() exists]) 237eda14cbcSMatt Macy ], [ 238eda14cbcSMatt Macy AC_MSG_RESULT(no) 239eda14cbcSMatt Macy ]) 240eda14cbcSMatt Macy]) 241eda14cbcSMatt Macy 242eda14cbcSMatt Macydnl # 2437877fdebSMatt Macydnl # check_disk_change() was removed in 5.10 2447877fdebSMatt Macydnl # 2457877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE], [ 2467877fdebSMatt Macy ZFS_LINUX_TEST_SRC([check_disk_change], [ 2477877fdebSMatt Macy #include <linux/fs.h> 2487877fdebSMatt Macy #include <linux/blkdev.h> 2497877fdebSMatt Macy ], [ 2507877fdebSMatt Macy struct block_device *bdev = NULL; 2517877fdebSMatt Macy bool error; 2527877fdebSMatt Macy 2537877fdebSMatt Macy error = check_disk_change(bdev); 2547877fdebSMatt Macy ]) 2557877fdebSMatt Macy]) 2567877fdebSMatt Macy 2577877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE], [ 2587877fdebSMatt Macy AC_MSG_CHECKING([whether check_disk_change() exists]) 2597877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([check_disk_change], [ 2607877fdebSMatt Macy AC_MSG_RESULT(yes) 2617877fdebSMatt Macy AC_DEFINE(HAVE_CHECK_DISK_CHANGE, 1, 2627877fdebSMatt Macy [check_disk_change() exists]) 2637877fdebSMatt Macy ], [ 2647877fdebSMatt Macy AC_MSG_RESULT(no) 2657877fdebSMatt Macy ]) 2667877fdebSMatt Macy]) 2677877fdebSMatt Macy 2687877fdebSMatt Macydnl # 269315ee00fSMartin Matuskadnl # 6.5.x API change 270315ee00fSMartin Matuskadnl # disk_check_media_change() was added 271315ee00fSMartin Matuskadnl # 272315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [ 273315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([disk_check_media_change], [ 274315ee00fSMartin Matuska #include <linux/fs.h> 275315ee00fSMartin Matuska #include <linux/blkdev.h> 276315ee00fSMartin Matuska ], [ 277315ee00fSMartin Matuska struct block_device *bdev = NULL; 278315ee00fSMartin Matuska bool error; 279315ee00fSMartin Matuska 280315ee00fSMartin Matuska error = disk_check_media_change(bdev->bd_disk); 281315ee00fSMartin Matuska ]) 282315ee00fSMartin Matuska]) 283315ee00fSMartin Matuska 284315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE], [ 285315ee00fSMartin Matuska AC_MSG_CHECKING([whether disk_check_media_change() exists]) 286315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([disk_check_media_change], [ 287315ee00fSMartin Matuska AC_MSG_RESULT(yes) 288315ee00fSMartin Matuska AC_DEFINE(HAVE_DISK_CHECK_MEDIA_CHANGE, 1, 289315ee00fSMartin Matuska [disk_check_media_change() exists]) 290315ee00fSMartin Matuska ], [ 291315ee00fSMartin Matuska AC_MSG_RESULT(no) 292315ee00fSMartin Matuska ]) 293315ee00fSMartin Matuska]) 294315ee00fSMartin Matuska 295315ee00fSMartin Matuskadnl # 296be181ee2SMartin Matuskadnl # bdev_kobj() is introduced from 5.12 297be181ee2SMartin Matuskadnl # 298be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ], [ 299be181ee2SMartin Matuska ZFS_LINUX_TEST_SRC([bdev_kobj], [ 300be181ee2SMartin Matuska #include <linux/fs.h> 301be181ee2SMartin Matuska #include <linux/blkdev.h> 302be181ee2SMartin Matuska #include <linux/kobject.h> 303be181ee2SMartin Matuska ], [ 304be181ee2SMartin Matuska struct block_device *bdev = NULL; 305be181ee2SMartin Matuska struct kobject *disk_kobj; 306be181ee2SMartin Matuska disk_kobj = bdev_kobj(bdev); 307be181ee2SMartin Matuska ]) 308be181ee2SMartin Matuska]) 309be181ee2SMartin Matuska 310be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ], [ 311be181ee2SMartin Matuska AC_MSG_CHECKING([whether bdev_kobj() exists]) 312be181ee2SMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_kobj], [ 313be181ee2SMartin Matuska AC_MSG_RESULT(yes) 314be181ee2SMartin Matuska AC_DEFINE(HAVE_BDEV_KOBJ, 1, 315be181ee2SMartin Matuska [bdev_kobj() exists]) 316be181ee2SMartin Matuska ], [ 317be181ee2SMartin Matuska AC_MSG_RESULT(no) 318be181ee2SMartin Matuska ]) 319be181ee2SMartin Matuska]) 320be181ee2SMartin Matuska 321be181ee2SMartin Matuskadnl # 322be181ee2SMartin Matuskadnl # part_to_dev() was removed in 5.12 323be181ee2SMartin Matuskadnl # 324be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV], [ 325be181ee2SMartin Matuska ZFS_LINUX_TEST_SRC([part_to_dev], [ 326be181ee2SMartin Matuska #include <linux/fs.h> 327be181ee2SMartin Matuska #include <linux/blkdev.h> 328be181ee2SMartin Matuska ], [ 329be181ee2SMartin Matuska struct hd_struct *p = NULL; 330be181ee2SMartin Matuska struct device *pdev; 331be181ee2SMartin Matuska pdev = part_to_dev(p); 332be181ee2SMartin Matuska ]) 333be181ee2SMartin Matuska]) 334be181ee2SMartin Matuska 335be181ee2SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV], [ 336be181ee2SMartin Matuska AC_MSG_CHECKING([whether part_to_dev() exists]) 337be181ee2SMartin Matuska ZFS_LINUX_TEST_RESULT([part_to_dev], [ 338be181ee2SMartin Matuska AC_MSG_RESULT(yes) 339be181ee2SMartin Matuska AC_DEFINE(HAVE_PART_TO_DEV, 1, 340be181ee2SMartin Matuska [part_to_dev() exists]) 341be181ee2SMartin Matuska ], [ 342be181ee2SMartin Matuska AC_MSG_RESULT(no) 343be181ee2SMartin Matuska ]) 344be181ee2SMartin Matuska]) 345be181ee2SMartin Matuska 346be181ee2SMartin Matuskadnl # 3477877fdebSMatt Macydnl # 5.10 API, check_disk_change() is removed, in favor of 3487877fdebSMatt Macydnl # bdev_check_media_change(), which doesn't force revalidation 3497877fdebSMatt Macydnl # 3507877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [ 3517877fdebSMatt Macy ZFS_LINUX_TEST_SRC([bdev_check_media_change], [ 3527877fdebSMatt Macy #include <linux/fs.h> 3537877fdebSMatt Macy #include <linux/blkdev.h> 3547877fdebSMatt Macy ], [ 3557877fdebSMatt Macy struct block_device *bdev = NULL; 3567877fdebSMatt Macy int error; 3577877fdebSMatt Macy 3587877fdebSMatt Macy error = bdev_check_media_change(bdev); 3597877fdebSMatt Macy ]) 3607877fdebSMatt Macy]) 3617877fdebSMatt Macy 3627877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [ 36321b492edSMartin Matuska AC_MSG_CHECKING([whether bdev_check_media_change() exists]) 3647877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_check_media_change], [ 3657877fdebSMatt Macy AC_MSG_RESULT(yes) 3667877fdebSMatt Macy AC_DEFINE(HAVE_BDEV_CHECK_MEDIA_CHANGE, 1, 3677877fdebSMatt Macy [bdev_check_media_change() exists]) 3687877fdebSMatt Macy ], [ 3697877fdebSMatt Macy AC_MSG_RESULT(no) 3707877fdebSMatt Macy ]) 3717877fdebSMatt Macy]) 3727877fdebSMatt Macy 3737877fdebSMatt Macydnl # 374eda14cbcSMatt Macydnl # 2.6.22 API change 375eda14cbcSMatt Macydnl # Single argument invalidate_bdev() 376eda14cbcSMatt Macydnl # 377eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [ 378eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([invalidate_bdev], [ 379eda14cbcSMatt Macy #include <linux/buffer_head.h> 380eda14cbcSMatt Macy #include <linux/blkdev.h> 381eda14cbcSMatt Macy ],[ 382eda14cbcSMatt Macy struct block_device *bdev = NULL; 383eda14cbcSMatt Macy invalidate_bdev(bdev); 384eda14cbcSMatt Macy ]) 385eda14cbcSMatt Macy]) 386eda14cbcSMatt Macy 387eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [ 388eda14cbcSMatt Macy AC_MSG_CHECKING([whether invalidate_bdev() exists]) 389eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([invalidate_bdev], [ 390eda14cbcSMatt Macy AC_MSG_RESULT(yes) 391eda14cbcSMatt Macy ],[ 392eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([invalidate_bdev()]) 393eda14cbcSMatt Macy ]) 394eda14cbcSMatt Macy]) 395eda14cbcSMatt Macy 396eda14cbcSMatt Macydnl # 3977877fdebSMatt Macydnl # 5.11 API, lookup_bdev() takes dev_t argument. 3987877fdebSMatt Macydnl # 2.6.27 API, lookup_bdev() was first exported. 3997877fdebSMatt Macydnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument. 400eda14cbcSMatt Macydnl # 401eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [ 4027877fdebSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [ 4037877fdebSMatt Macy #include <linux/blkdev.h> 4047877fdebSMatt Macy ], [ 4057877fdebSMatt Macy int error __attribute__ ((unused)); 4067877fdebSMatt Macy const char path[] = "/example/path"; 4077877fdebSMatt Macy dev_t dev; 4087877fdebSMatt Macy 4097877fdebSMatt Macy error = lookup_bdev(path, &dev); 4107877fdebSMatt Macy ]) 4117877fdebSMatt Macy 412eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [ 413eda14cbcSMatt Macy #include <linux/fs.h> 414eda14cbcSMatt Macy #include <linux/blkdev.h> 415eda14cbcSMatt Macy ], [ 4167877fdebSMatt Macy struct block_device *bdev __attribute__ ((unused)); 4177877fdebSMatt Macy const char path[] = "/example/path"; 4187877fdebSMatt Macy 4197877fdebSMatt Macy bdev = lookup_bdev(path); 420eda14cbcSMatt Macy ]) 421eda14cbcSMatt Macy 4227877fdebSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [ 423eda14cbcSMatt Macy #include <linux/fs.h> 424eda14cbcSMatt Macy ], [ 4257877fdebSMatt Macy struct block_device *bdev __attribute__ ((unused)); 4267877fdebSMatt Macy const char path[] = "/example/path"; 4277877fdebSMatt Macy 4287877fdebSMatt Macy bdev = lookup_bdev(path, FMODE_READ); 429eda14cbcSMatt Macy ]) 430eda14cbcSMatt Macy]) 431eda14cbcSMatt Macy 432eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [ 4337877fdebSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg]) 4347877fdebSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt], 4357877fdebSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 4367877fdebSMatt Macy AC_MSG_RESULT(yes) 4377877fdebSMatt Macy AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1, 4387877fdebSMatt Macy [lookup_bdev() wants dev_t arg]) 4397877fdebSMatt Macy ], [ 4407877fdebSMatt Macy AC_MSG_RESULT(no) 4417877fdebSMatt Macy 442eda14cbcSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) 443eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], 444eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 445eda14cbcSMatt Macy AC_MSG_RESULT(yes) 446eda14cbcSMatt Macy AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, 447eda14cbcSMatt Macy [lookup_bdev() wants 1 arg]) 448eda14cbcSMatt Macy ], [ 449eda14cbcSMatt Macy AC_MSG_RESULT(no) 450eda14cbcSMatt Macy 4517877fdebSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants mode arg]) 4527877fdebSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode], 453eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 454eda14cbcSMatt Macy AC_MSG_RESULT(yes) 4557877fdebSMatt Macy AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1, 4567877fdebSMatt Macy [lookup_bdev() wants mode arg]) 457eda14cbcSMatt Macy ], [ 458eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([lookup_bdev()]) 459eda14cbcSMatt Macy ]) 460eda14cbcSMatt Macy ]) 461eda14cbcSMatt Macy ]) 4627877fdebSMatt Macy]) 463eda14cbcSMatt Macy 464eda14cbcSMatt Macydnl # 465eda14cbcSMatt Macydnl # 2.6.30 API change 466eda14cbcSMatt Macydnl # 467eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way 468eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a 469eda14cbcSMatt Macydnl # read-modify-write operation. 470eda14cbcSMatt Macydnl # 471eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because 472eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value. 473eda14cbcSMatt Macydnl # 474eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 475eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [ 476eda14cbcSMatt Macy #include <linux/blkdev.h> 477eda14cbcSMatt Macy ],[ 478eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 479eda14cbcSMatt Macy bdev_physical_block_size(bdev); 480eda14cbcSMatt Macy ]) 481eda14cbcSMatt Macy]) 482eda14cbcSMatt Macy 483eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 484eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_physical_block_size() is available]) 485eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [ 486eda14cbcSMatt Macy AC_MSG_RESULT(yes) 487eda14cbcSMatt Macy ],[ 488eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()]) 489eda14cbcSMatt Macy ]) 490eda14cbcSMatt Macy]) 491eda14cbcSMatt Macy 492eda14cbcSMatt Macydnl # 493eda14cbcSMatt Macydnl # 2.6.30 API change 494eda14cbcSMatt Macydnl # Added bdev_logical_block_size(). 495eda14cbcSMatt Macydnl # 496eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 497eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [ 498eda14cbcSMatt Macy #include <linux/blkdev.h> 499eda14cbcSMatt Macy ],[ 500eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 501eda14cbcSMatt Macy bdev_logical_block_size(bdev); 502eda14cbcSMatt Macy ]) 503eda14cbcSMatt Macy]) 504eda14cbcSMatt Macy 505eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 506eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_logical_block_size() is available]) 507eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [ 508eda14cbcSMatt Macy AC_MSG_RESULT(yes) 509eda14cbcSMatt Macy ],[ 510eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()]) 511eda14cbcSMatt Macy ]) 512eda14cbcSMatt Macy]) 513eda14cbcSMatt Macy 5147877fdebSMatt Macydnl # 5157877fdebSMatt Macydnl # 5.11 API change 5167877fdebSMatt Macydnl # Added bdev_whole() helper. 5177877fdebSMatt Macydnl # 5187877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [ 5197877fdebSMatt Macy ZFS_LINUX_TEST_SRC([bdev_whole], [ 5207877fdebSMatt Macy #include <linux/blkdev.h> 5217877fdebSMatt Macy ],[ 5227877fdebSMatt Macy struct block_device *bdev = NULL; 5237877fdebSMatt Macy bdev = bdev_whole(bdev); 5247877fdebSMatt Macy ]) 5257877fdebSMatt Macy]) 5267877fdebSMatt Macy 5277877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [ 5287877fdebSMatt Macy AC_MSG_CHECKING([whether bdev_whole() is available]) 5297877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_whole], [ 5307877fdebSMatt Macy AC_MSG_RESULT(yes) 5317877fdebSMatt Macy AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available]) 5327877fdebSMatt Macy ],[ 5337877fdebSMatt Macy AC_MSG_RESULT(no) 5347877fdebSMatt Macy ]) 5357877fdebSMatt Macy]) 5367877fdebSMatt Macy 537681ce946SMartin Matuskadnl # 538*75e1fea6SMartin Matuskadnl # 5.16 API change 539*75e1fea6SMartin Matuskadnl # Added bdev_nr_bytes() helper. 540*75e1fea6SMartin Matuskadnl # 541*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES], [ 542*75e1fea6SMartin Matuska ZFS_LINUX_TEST_SRC([bdev_nr_bytes], [ 543*75e1fea6SMartin Matuska #include <linux/blkdev.h> 544*75e1fea6SMartin Matuska ],[ 545*75e1fea6SMartin Matuska struct block_device *bdev = NULL; 546*75e1fea6SMartin Matuska loff_t nr_bytes __attribute__ ((unused)) = 0; 547*75e1fea6SMartin Matuska nr_bytes = bdev_nr_bytes(bdev); 548*75e1fea6SMartin Matuska ]) 549*75e1fea6SMartin Matuska]) 550*75e1fea6SMartin Matuska 551*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES], [ 552*75e1fea6SMartin Matuska AC_MSG_CHECKING([whether bdev_nr_bytes() is available]) 553*75e1fea6SMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_nr_bytes], [ 554*75e1fea6SMartin Matuska AC_MSG_RESULT(yes) 555*75e1fea6SMartin Matuska AC_DEFINE(HAVE_BDEV_NR_BYTES, 1, [bdev_nr_bytes() is available]) 556*75e1fea6SMartin Matuska ],[ 557*75e1fea6SMartin Matuska AC_MSG_RESULT(no) 558*75e1fea6SMartin Matuska ]) 559*75e1fea6SMartin Matuska]) 560*75e1fea6SMartin Matuska 561*75e1fea6SMartin Matuskadnl # 562271171e0SMartin Matuskadnl # 5.20 API change, 563271171e0SMartin Matuskadnl # Removed bdevname(), snprintf(.., %pg) should be used. 564271171e0SMartin Matuskadnl # 565271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [ 566271171e0SMartin Matuska ZFS_LINUX_TEST_SRC([bdevname], [ 567271171e0SMartin Matuska #include <linux/fs.h> 568271171e0SMartin Matuska #include <linux/blkdev.h> 569271171e0SMartin Matuska ], [ 570271171e0SMartin Matuska struct block_device *bdev __attribute__ ((unused)) = NULL; 571271171e0SMartin Matuska char path[BDEVNAME_SIZE]; 572271171e0SMartin Matuska 573271171e0SMartin Matuska (void) bdevname(bdev, path); 574271171e0SMartin Matuska ]) 575271171e0SMartin Matuska]) 576271171e0SMartin Matuska 577271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [ 578271171e0SMartin Matuska AC_MSG_CHECKING([whether bdevname() exists]) 579271171e0SMartin Matuska ZFS_LINUX_TEST_RESULT([bdevname], [ 580271171e0SMartin Matuska AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available]) 581271171e0SMartin Matuska AC_MSG_RESULT(yes) 582271171e0SMartin Matuska ], [ 583271171e0SMartin Matuska AC_MSG_RESULT(no) 584271171e0SMartin Matuska ]) 585271171e0SMartin Matuska]) 586271171e0SMartin Matuska 587271171e0SMartin Matuskadnl # 5881719886fSMartin Matuskadnl # TRIM support: discard and secure erase. We make use of asynchronous 5891719886fSMartin Matuskadnl # functions when available. 590e3aa18adSMartin Matuskadnl # 5911719886fSMartin Matuskadnl # 3.10: 5921719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(..., 0) 5931719886fSMartin Matuskadnl # sync erase: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 5941719886fSMartin Matuskadnl # async discard: [not available] 5951719886fSMartin Matuskadnl # async erase: [not available] 5961719886fSMartin Matuskadnl # 5971719886fSMartin Matuskadnl # 4.7: 5981719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(..., 0) 5991719886fSMartin Matuskadnl # sync erase: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 6001719886fSMartin Matuskadnl # async discard: __blkdev_issue_discard(..., 0) 6011719886fSMartin Matuskadnl # async erase: __blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 6021719886fSMartin Matuskadnl # 6031719886fSMartin Matuskadnl # 5.19: 6041719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(...) 6051719886fSMartin Matuskadnl # sync erase: blkdev_issue_secure_erase(...) 6061719886fSMartin Matuskadnl # async discard: __blkdev_issue_discard(...) 6071719886fSMartin Matuskadnl # async erase: [not available] 6081719886fSMartin Matuskadnl # 6091719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD], [ 6101719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_noflags], [ 611e3aa18adSMartin Matuska #include <linux/blkdev.h> 612e3aa18adSMartin Matuska ],[ 613e3aa18adSMartin Matuska struct block_device *bdev = NULL; 614e3aa18adSMartin Matuska sector_t sector = 0; 615e3aa18adSMartin Matuska sector_t nr_sects = 0; 616e3aa18adSMartin Matuska int error __attribute__ ((unused)); 617e3aa18adSMartin Matuska 6181719886fSMartin Matuska error = blkdev_issue_discard(bdev, 619e3aa18adSMartin Matuska sector, nr_sects, GFP_KERNEL); 620e3aa18adSMartin Matuska ]) 6211719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [ 6221719886fSMartin Matuska #include <linux/blkdev.h> 6231719886fSMartin Matuska ],[ 6241719886fSMartin Matuska struct block_device *bdev = NULL; 6251719886fSMartin Matuska sector_t sector = 0; 6261719886fSMartin Matuska sector_t nr_sects = 0; 6271719886fSMartin Matuska unsigned long flags = 0; 6281719886fSMartin Matuska int error __attribute__ ((unused)); 629e3aa18adSMartin Matuska 6301719886fSMartin Matuska error = blkdev_issue_discard(bdev, 6311719886fSMartin Matuska sector, nr_sects, GFP_KERNEL, flags); 6321719886fSMartin Matuska ]) 6331719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_noflags], [ 6341719886fSMartin Matuska #include <linux/blkdev.h> 6351719886fSMartin Matuska ],[ 6361719886fSMartin Matuska struct block_device *bdev = NULL; 6371719886fSMartin Matuska sector_t sector = 0; 6381719886fSMartin Matuska sector_t nr_sects = 0; 6391719886fSMartin Matuska struct bio *biop = NULL; 6401719886fSMartin Matuska int error __attribute__ ((unused)); 6411719886fSMartin Matuska 6421719886fSMartin Matuska error = __blkdev_issue_discard(bdev, 6431719886fSMartin Matuska sector, nr_sects, GFP_KERNEL, &biop); 6441719886fSMartin Matuska ]) 645a4e5e010SMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_flags], [ 646a4e5e010SMartin Matuska #include <linux/blkdev.h> 647a4e5e010SMartin Matuska ],[ 648a4e5e010SMartin Matuska struct block_device *bdev = NULL; 649a4e5e010SMartin Matuska sector_t sector = 0; 650a4e5e010SMartin Matuska sector_t nr_sects = 0; 651a4e5e010SMartin Matuska unsigned long flags = 0; 652a4e5e010SMartin Matuska struct bio *biop = NULL; 653a4e5e010SMartin Matuska int error __attribute__ ((unused)); 654a4e5e010SMartin Matuska 655a4e5e010SMartin Matuska error = __blkdev_issue_discard(bdev, 656a4e5e010SMartin Matuska sector, nr_sects, GFP_KERNEL, flags, &biop); 657a4e5e010SMartin Matuska ]) 6581719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [ 659e3aa18adSMartin Matuska #include <linux/blkdev.h> 660e3aa18adSMartin Matuska ],[ 661e3aa18adSMartin Matuska struct block_device *bdev = NULL; 662e3aa18adSMartin Matuska sector_t sector = 0; 663e3aa18adSMartin Matuska sector_t nr_sects = 0; 664e3aa18adSMartin Matuska int error __attribute__ ((unused)); 665e3aa18adSMartin Matuska 6661719886fSMartin Matuska error = blkdev_issue_secure_erase(bdev, 6671719886fSMartin Matuska sector, nr_sects, GFP_KERNEL); 668e3aa18adSMartin Matuska ]) 669e3aa18adSMartin Matuska]) 670e3aa18adSMartin Matuska 6711719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD], [ 6721719886fSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_discard() is available]) 6731719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_noflags], [ 6741719886fSMartin Matuska AC_MSG_RESULT(yes) 6751719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_NOFLAGS, 1, 6761719886fSMartin Matuska [blkdev_issue_discard() is available]) 6771719886fSMartin Matuska ],[ 6781719886fSMartin Matuska AC_MSG_RESULT(no) 6791719886fSMartin Matuska ]) 6801719886fSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_discard(flags) is available]) 6811719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [ 6821719886fSMartin Matuska AC_MSG_RESULT(yes) 6831719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_FLAGS, 1, 6841719886fSMartin Matuska [blkdev_issue_discard(flags) is available]) 6851719886fSMartin Matuska ],[ 6861719886fSMartin Matuska AC_MSG_RESULT(no) 6871719886fSMartin Matuska ]) 6881719886fSMartin Matuska AC_MSG_CHECKING([whether __blkdev_issue_discard() is available]) 6891719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_noflags], [ 6901719886fSMartin Matuska AC_MSG_RESULT(yes) 6911719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_NOFLAGS, 1, 6921719886fSMartin Matuska [__blkdev_issue_discard() is available]) 6931719886fSMartin Matuska ],[ 6941719886fSMartin Matuska AC_MSG_RESULT(no) 6951719886fSMartin Matuska ]) 6961719886fSMartin Matuska AC_MSG_CHECKING([whether __blkdev_issue_discard(flags) is available]) 6971719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_flags], [ 6981719886fSMartin Matuska AC_MSG_RESULT(yes) 6991719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_FLAGS, 1, 7001719886fSMartin Matuska [__blkdev_issue_discard(flags) is available]) 7011719886fSMartin Matuska ],[ 7021719886fSMartin Matuska AC_MSG_RESULT(no) 7031719886fSMartin Matuska ]) 704e3aa18adSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available]) 705e3aa18adSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [ 706e3aa18adSMartin Matuska AC_MSG_RESULT(yes) 707e3aa18adSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1, 708e3aa18adSMartin Matuska [blkdev_issue_secure_erase() is available]) 709e3aa18adSMartin Matuska ],[ 710e3aa18adSMartin Matuska AC_MSG_RESULT(no) 711e3aa18adSMartin Matuska ]) 712a4e5e010SMartin Matuska]) 713e3aa18adSMartin Matuska 714e3aa18adSMartin Matuskadnl # 715681ce946SMartin Matuskadnl # 5.13 API change 716681ce946SMartin Matuskadnl # blkdev_get_by_path() no longer handles ERESTARTSYS 717681ce946SMartin Matuskadnl # 718681ce946SMartin Matuskadnl # Unfortunately we're forced to rely solely on the kernel version 719681ce946SMartin Matuskadnl # number in order to determine the expected behavior. This was an 720681ce946SMartin Matuskadnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607. 721681ce946SMartin Matuskadnl # 722681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [ 723681ce946SMartin Matuska AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS]) 724681ce946SMartin Matuska AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [ 725681ce946SMartin Matuska AC_MSG_RESULT(yes) 726681ce946SMartin Matuska AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1, 727681ce946SMartin Matuska [blkdev_get_by_path() handles ERESTARTSYS]) 728681ce946SMartin Matuska ],[ 729681ce946SMartin Matuska AC_MSG_RESULT(no) 730681ce946SMartin Matuska ],[ 731681ce946SMartin Matuska AC_MSG_RESULT(no) 732681ce946SMartin Matuska ]) 733681ce946SMartin Matuska]) 734681ce946SMartin Matuska 735315ee00fSMartin Matuskadnl # 736315ee00fSMartin Matuskadnl # 6.5.x API change 737315ee00fSMartin Matuskadnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT 738315ee00fSMartin Matuskadnl # 739315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [ 740315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [ 741315ee00fSMartin Matuska #include <linux/blkdev.h> 742315ee00fSMartin Matuska ],[ 743315ee00fSMartin Matuska blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT; 744315ee00fSMartin Matuska ]) 745315ee00fSMartin Matuska]) 746315ee00fSMartin Matuska 747315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [ 748315ee00fSMartin Matuska AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined]) 749315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [ 750315ee00fSMartin Matuska AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined]) 751315ee00fSMartin Matuska AC_MSG_RESULT(yes) 752315ee00fSMartin Matuska ], [ 753315ee00fSMartin Matuska AC_MSG_RESULT(no) 754315ee00fSMartin Matuska ]) 755315ee00fSMartin Matuska ]) 756315ee00fSMartin Matuska]) 757315ee00fSMartin Matuska 758eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [ 759eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH 760315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG 761fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH 7621719886fSMartin Matuska ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH 763eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_PUT 764315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER 765fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE 766eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART 767eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV 768eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV 769eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 770eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 7717877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE 7727877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 7737877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE 774*75e1fea6SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES 775271171e0SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME 7761719886fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD 777be181ee2SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ 778be181ee2SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV 779315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE 780315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT 781315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T 782eda14cbcSMatt Macy]) 783eda14cbcSMatt Macy 784eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ 785eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH 786eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_PUT 787eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_REREAD_PART 788eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV 789eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV 790eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 791eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 7927877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE 7937877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 7947877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE 795*75e1fea6SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES 796271171e0SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEVNAME 797681ce946SMartin Matuska ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS 7981719886fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD 799be181ee2SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ 800be181ee2SMartin Matuska ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV 801315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE 802315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT 803315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T 804eda14cbcSMatt Macy]) 805