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. 399eda14cbcSMatt Macydnl # 400eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [ 4017877fdebSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [ 4027877fdebSMatt Macy #include <linux/blkdev.h> 4037877fdebSMatt Macy ], [ 4047877fdebSMatt Macy int error __attribute__ ((unused)); 4057877fdebSMatt Macy const char path[] = "/example/path"; 4067877fdebSMatt Macy dev_t dev; 4077877fdebSMatt Macy 4087877fdebSMatt Macy error = lookup_bdev(path, &dev); 4097877fdebSMatt Macy ]) 4107877fdebSMatt Macy 411eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [ 412eda14cbcSMatt Macy #include <linux/fs.h> 413eda14cbcSMatt Macy #include <linux/blkdev.h> 414eda14cbcSMatt Macy ], [ 4157877fdebSMatt Macy struct block_device *bdev __attribute__ ((unused)); 4167877fdebSMatt Macy const char path[] = "/example/path"; 4177877fdebSMatt Macy 4187877fdebSMatt Macy bdev = lookup_bdev(path); 419eda14cbcSMatt Macy ]) 420eda14cbcSMatt Macy]) 421eda14cbcSMatt Macy 422eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [ 4237877fdebSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg]) 4247877fdebSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt], 4257877fdebSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 4267877fdebSMatt Macy AC_MSG_RESULT(yes) 4277877fdebSMatt Macy AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1, 4287877fdebSMatt Macy [lookup_bdev() wants dev_t arg]) 4297877fdebSMatt Macy ], [ 4307877fdebSMatt Macy AC_MSG_RESULT(no) 4317877fdebSMatt Macy 432eda14cbcSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) 433eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], 434eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 435eda14cbcSMatt Macy AC_MSG_RESULT(yes) 436eda14cbcSMatt Macy AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, 437eda14cbcSMatt Macy [lookup_bdev() wants 1 arg]) 438eda14cbcSMatt Macy ], [ 439eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([lookup_bdev()]) 440eda14cbcSMatt Macy ]) 441eda14cbcSMatt Macy ]) 442eda14cbcSMatt Macy]) 443eda14cbcSMatt Macy 444eda14cbcSMatt Macydnl # 445eda14cbcSMatt Macydnl # 2.6.30 API change 446eda14cbcSMatt Macydnl # 447eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way 448eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a 449eda14cbcSMatt Macydnl # read-modify-write operation. 450eda14cbcSMatt Macydnl # 451eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because 452eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value. 453eda14cbcSMatt Macydnl # 454eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 455eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [ 456eda14cbcSMatt Macy #include <linux/blkdev.h> 457eda14cbcSMatt Macy ],[ 458eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 459eda14cbcSMatt Macy bdev_physical_block_size(bdev); 460eda14cbcSMatt Macy ]) 461eda14cbcSMatt Macy]) 462eda14cbcSMatt Macy 463eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 464eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_physical_block_size() is available]) 465eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [ 466eda14cbcSMatt Macy AC_MSG_RESULT(yes) 467eda14cbcSMatt Macy ],[ 468eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()]) 469eda14cbcSMatt Macy ]) 470eda14cbcSMatt Macy]) 471eda14cbcSMatt Macy 472eda14cbcSMatt Macydnl # 473eda14cbcSMatt Macydnl # 2.6.30 API change 474eda14cbcSMatt Macydnl # Added bdev_logical_block_size(). 475eda14cbcSMatt Macydnl # 476eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 477eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [ 478eda14cbcSMatt Macy #include <linux/blkdev.h> 479eda14cbcSMatt Macy ],[ 480eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 481eda14cbcSMatt Macy bdev_logical_block_size(bdev); 482eda14cbcSMatt Macy ]) 483eda14cbcSMatt Macy]) 484eda14cbcSMatt Macy 485eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 486eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_logical_block_size() is available]) 487eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [ 488eda14cbcSMatt Macy AC_MSG_RESULT(yes) 489eda14cbcSMatt Macy ],[ 490eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()]) 491eda14cbcSMatt Macy ]) 492eda14cbcSMatt Macy]) 493eda14cbcSMatt Macy 4947877fdebSMatt Macydnl # 4957877fdebSMatt Macydnl # 5.11 API change 4967877fdebSMatt Macydnl # Added bdev_whole() helper. 4977877fdebSMatt Macydnl # 4987877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [ 4997877fdebSMatt Macy ZFS_LINUX_TEST_SRC([bdev_whole], [ 5007877fdebSMatt Macy #include <linux/blkdev.h> 5017877fdebSMatt Macy ],[ 5027877fdebSMatt Macy struct block_device *bdev = NULL; 5037877fdebSMatt Macy bdev = bdev_whole(bdev); 5047877fdebSMatt Macy ]) 5057877fdebSMatt Macy]) 5067877fdebSMatt Macy 5077877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [ 5087877fdebSMatt Macy AC_MSG_CHECKING([whether bdev_whole() is available]) 5097877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_whole], [ 5107877fdebSMatt Macy AC_MSG_RESULT(yes) 5117877fdebSMatt Macy AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available]) 5127877fdebSMatt Macy ],[ 5137877fdebSMatt Macy AC_MSG_RESULT(no) 5147877fdebSMatt Macy ]) 5157877fdebSMatt Macy]) 5167877fdebSMatt Macy 517681ce946SMartin Matuskadnl # 518*75e1fea6SMartin Matuskadnl # 5.16 API change 519*75e1fea6SMartin Matuskadnl # Added bdev_nr_bytes() helper. 520*75e1fea6SMartin Matuskadnl # 521*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES], [ 522*75e1fea6SMartin Matuska ZFS_LINUX_TEST_SRC([bdev_nr_bytes], [ 523*75e1fea6SMartin Matuska #include <linux/blkdev.h> 524*75e1fea6SMartin Matuska ],[ 525*75e1fea6SMartin Matuska struct block_device *bdev = NULL; 526*75e1fea6SMartin Matuska loff_t nr_bytes __attribute__ ((unused)) = 0; 527*75e1fea6SMartin Matuska nr_bytes = bdev_nr_bytes(bdev); 528*75e1fea6SMartin Matuska ]) 529*75e1fea6SMartin Matuska]) 530*75e1fea6SMartin Matuska 531*75e1fea6SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES], [ 532*75e1fea6SMartin Matuska AC_MSG_CHECKING([whether bdev_nr_bytes() is available]) 533*75e1fea6SMartin Matuska ZFS_LINUX_TEST_RESULT([bdev_nr_bytes], [ 534*75e1fea6SMartin Matuska AC_MSG_RESULT(yes) 535*75e1fea6SMartin Matuska AC_DEFINE(HAVE_BDEV_NR_BYTES, 1, [bdev_nr_bytes() is available]) 536*75e1fea6SMartin Matuska ],[ 537*75e1fea6SMartin Matuska AC_MSG_RESULT(no) 538*75e1fea6SMartin Matuska ]) 539*75e1fea6SMartin Matuska]) 540*75e1fea6SMartin Matuska 541*75e1fea6SMartin Matuskadnl # 542271171e0SMartin Matuskadnl # 5.20 API change, 543271171e0SMartin Matuskadnl # Removed bdevname(), snprintf(.., %pg) should be used. 544271171e0SMartin Matuskadnl # 545271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME], [ 546271171e0SMartin Matuska ZFS_LINUX_TEST_SRC([bdevname], [ 547271171e0SMartin Matuska #include <linux/fs.h> 548271171e0SMartin Matuska #include <linux/blkdev.h> 549271171e0SMartin Matuska ], [ 550271171e0SMartin Matuska struct block_device *bdev __attribute__ ((unused)) = NULL; 551271171e0SMartin Matuska char path[BDEVNAME_SIZE]; 552271171e0SMartin Matuska 553271171e0SMartin Matuska (void) bdevname(bdev, path); 554271171e0SMartin Matuska ]) 555271171e0SMartin Matuska]) 556271171e0SMartin Matuska 557271171e0SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEVNAME], [ 558271171e0SMartin Matuska AC_MSG_CHECKING([whether bdevname() exists]) 559271171e0SMartin Matuska ZFS_LINUX_TEST_RESULT([bdevname], [ 560271171e0SMartin Matuska AC_DEFINE(HAVE_BDEVNAME, 1, [bdevname() is available]) 561271171e0SMartin Matuska AC_MSG_RESULT(yes) 562271171e0SMartin Matuska ], [ 563271171e0SMartin Matuska AC_MSG_RESULT(no) 564271171e0SMartin Matuska ]) 565271171e0SMartin Matuska]) 566271171e0SMartin Matuska 567271171e0SMartin Matuskadnl # 5681719886fSMartin Matuskadnl # TRIM support: discard and secure erase. We make use of asynchronous 5691719886fSMartin Matuskadnl # functions when available. 570e3aa18adSMartin Matuskadnl # 5711719886fSMartin Matuskadnl # 3.10: 5721719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(..., 0) 5731719886fSMartin Matuskadnl # sync erase: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 5741719886fSMartin Matuskadnl # async discard: [not available] 5751719886fSMartin Matuskadnl # async erase: [not available] 5761719886fSMartin Matuskadnl # 5771719886fSMartin Matuskadnl # 4.7: 5781719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(..., 0) 5791719886fSMartin Matuskadnl # sync erase: blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 5801719886fSMartin Matuskadnl # async discard: __blkdev_issue_discard(..., 0) 5811719886fSMartin Matuskadnl # async erase: __blkdev_issue_discard(..., BLKDEV_DISCARD_SECURE) 5821719886fSMartin Matuskadnl # 5831719886fSMartin Matuskadnl # 5.19: 5841719886fSMartin Matuskadnl # sync discard: blkdev_issue_discard(...) 5851719886fSMartin Matuskadnl # sync erase: blkdev_issue_secure_erase(...) 5861719886fSMartin Matuskadnl # async discard: __blkdev_issue_discard(...) 5871719886fSMartin Matuskadnl # async erase: [not available] 5881719886fSMartin Matuskadnl # 5891719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD], [ 5901719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_noflags], [ 591e3aa18adSMartin Matuska #include <linux/blkdev.h> 592e3aa18adSMartin Matuska ],[ 593e3aa18adSMartin Matuska struct block_device *bdev = NULL; 594e3aa18adSMartin Matuska sector_t sector = 0; 595e3aa18adSMartin Matuska sector_t nr_sects = 0; 596e3aa18adSMartin Matuska int error __attribute__ ((unused)); 597e3aa18adSMartin Matuska 5981719886fSMartin Matuska error = blkdev_issue_discard(bdev, 599e3aa18adSMartin Matuska sector, nr_sects, GFP_KERNEL); 600e3aa18adSMartin Matuska ]) 6011719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_flags], [ 6021719886fSMartin Matuska #include <linux/blkdev.h> 6031719886fSMartin Matuska ],[ 6041719886fSMartin Matuska struct block_device *bdev = NULL; 6051719886fSMartin Matuska sector_t sector = 0; 6061719886fSMartin Matuska sector_t nr_sects = 0; 6071719886fSMartin Matuska unsigned long flags = 0; 6081719886fSMartin Matuska int error __attribute__ ((unused)); 609e3aa18adSMartin Matuska 6101719886fSMartin Matuska error = blkdev_issue_discard(bdev, 6111719886fSMartin Matuska sector, nr_sects, GFP_KERNEL, flags); 6121719886fSMartin Matuska ]) 6131719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_noflags], [ 6141719886fSMartin Matuska #include <linux/blkdev.h> 6151719886fSMartin Matuska ],[ 6161719886fSMartin Matuska struct block_device *bdev = NULL; 6171719886fSMartin Matuska sector_t sector = 0; 6181719886fSMartin Matuska sector_t nr_sects = 0; 6191719886fSMartin Matuska struct bio *biop = NULL; 6201719886fSMartin Matuska int error __attribute__ ((unused)); 6211719886fSMartin Matuska 6221719886fSMartin Matuska error = __blkdev_issue_discard(bdev, 6231719886fSMartin Matuska sector, nr_sects, GFP_KERNEL, &biop); 6241719886fSMartin Matuska ]) 625a4e5e010SMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_discard_async_flags], [ 626a4e5e010SMartin Matuska #include <linux/blkdev.h> 627a4e5e010SMartin Matuska ],[ 628a4e5e010SMartin Matuska struct block_device *bdev = NULL; 629a4e5e010SMartin Matuska sector_t sector = 0; 630a4e5e010SMartin Matuska sector_t nr_sects = 0; 631a4e5e010SMartin Matuska unsigned long flags = 0; 632a4e5e010SMartin Matuska struct bio *biop = NULL; 633a4e5e010SMartin Matuska int error __attribute__ ((unused)); 634a4e5e010SMartin Matuska 635a4e5e010SMartin Matuska error = __blkdev_issue_discard(bdev, 636a4e5e010SMartin Matuska sector, nr_sects, GFP_KERNEL, flags, &biop); 637a4e5e010SMartin Matuska ]) 6381719886fSMartin Matuska ZFS_LINUX_TEST_SRC([blkdev_issue_secure_erase], [ 639e3aa18adSMartin Matuska #include <linux/blkdev.h> 640e3aa18adSMartin Matuska ],[ 641e3aa18adSMartin Matuska struct block_device *bdev = NULL; 642e3aa18adSMartin Matuska sector_t sector = 0; 643e3aa18adSMartin Matuska sector_t nr_sects = 0; 644e3aa18adSMartin Matuska int error __attribute__ ((unused)); 645e3aa18adSMartin Matuska 6461719886fSMartin Matuska error = blkdev_issue_secure_erase(bdev, 6471719886fSMartin Matuska sector, nr_sects, GFP_KERNEL); 648e3aa18adSMartin Matuska ]) 649e3aa18adSMartin Matuska]) 650e3aa18adSMartin Matuska 6511719886fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD], [ 6521719886fSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_discard() is available]) 6531719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_noflags], [ 6541719886fSMartin Matuska AC_MSG_RESULT(yes) 6551719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_NOFLAGS, 1, 6561719886fSMartin Matuska [blkdev_issue_discard() is available]) 6571719886fSMartin Matuska ],[ 6581719886fSMartin Matuska AC_MSG_RESULT(no) 6591719886fSMartin Matuska ]) 6601719886fSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_discard(flags) is available]) 6611719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_flags], [ 6621719886fSMartin Matuska AC_MSG_RESULT(yes) 6631719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_FLAGS, 1, 6641719886fSMartin Matuska [blkdev_issue_discard(flags) is available]) 6651719886fSMartin Matuska ],[ 6661719886fSMartin Matuska AC_MSG_RESULT(no) 6671719886fSMartin Matuska ]) 6681719886fSMartin Matuska AC_MSG_CHECKING([whether __blkdev_issue_discard() is available]) 6691719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_noflags], [ 6701719886fSMartin Matuska AC_MSG_RESULT(yes) 6711719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_NOFLAGS, 1, 6721719886fSMartin Matuska [__blkdev_issue_discard() is available]) 6731719886fSMartin Matuska ],[ 6741719886fSMartin Matuska AC_MSG_RESULT(no) 6751719886fSMartin Matuska ]) 6761719886fSMartin Matuska AC_MSG_CHECKING([whether __blkdev_issue_discard(flags) is available]) 6771719886fSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_discard_async_flags], [ 6781719886fSMartin Matuska AC_MSG_RESULT(yes) 6791719886fSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_DISCARD_ASYNC_FLAGS, 1, 6801719886fSMartin Matuska [__blkdev_issue_discard(flags) is available]) 6811719886fSMartin Matuska ],[ 6821719886fSMartin Matuska AC_MSG_RESULT(no) 6831719886fSMartin Matuska ]) 684e3aa18adSMartin Matuska AC_MSG_CHECKING([whether blkdev_issue_secure_erase() is available]) 685e3aa18adSMartin Matuska ZFS_LINUX_TEST_RESULT([blkdev_issue_secure_erase], [ 686e3aa18adSMartin Matuska AC_MSG_RESULT(yes) 687e3aa18adSMartin Matuska AC_DEFINE(HAVE_BLKDEV_ISSUE_SECURE_ERASE, 1, 688e3aa18adSMartin Matuska [blkdev_issue_secure_erase() is available]) 689e3aa18adSMartin Matuska ],[ 690e3aa18adSMartin Matuska AC_MSG_RESULT(no) 691e3aa18adSMartin Matuska ]) 692a4e5e010SMartin Matuska]) 693e3aa18adSMartin Matuska 694e3aa18adSMartin Matuskadnl # 695681ce946SMartin Matuskadnl # 5.13 API change 696681ce946SMartin Matuskadnl # blkdev_get_by_path() no longer handles ERESTARTSYS 697681ce946SMartin Matuskadnl # 698681ce946SMartin Matuskadnl # Unfortunately we're forced to rely solely on the kernel version 699681ce946SMartin Matuskadnl # number in order to determine the expected behavior. This was an 700681ce946SMartin Matuskadnl # internal change to blkdev_get_by_dev(), see commit a8ed1a0607. 701681ce946SMartin Matuskadnl # 702681ce946SMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS], [ 703681ce946SMartin Matuska AC_MSG_CHECKING([whether blkdev_get_by_path() handles ERESTARTSYS]) 704681ce946SMartin Matuska AS_VERSION_COMPARE([$LINUX_VERSION], [5.13.0], [ 705681ce946SMartin Matuska AC_MSG_RESULT(yes) 706681ce946SMartin Matuska AC_DEFINE(HAVE_BLKDEV_GET_ERESTARTSYS, 1, 707681ce946SMartin Matuska [blkdev_get_by_path() handles ERESTARTSYS]) 708681ce946SMartin Matuska ],[ 709681ce946SMartin Matuska AC_MSG_RESULT(no) 710681ce946SMartin Matuska ],[ 711681ce946SMartin Matuska AC_MSG_RESULT(no) 712681ce946SMartin Matuska ]) 713681ce946SMartin Matuska]) 714681ce946SMartin Matuska 715315ee00fSMartin Matuskadnl # 716315ee00fSMartin Matuskadnl # 6.5.x API change 717315ee00fSMartin Matuskadnl # BLK_STS_NEXUS replaced with BLK_STS_RESV_CONFLICT 718315ee00fSMartin Matuskadnl # 719315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT], [ 720315ee00fSMartin Matuska ZFS_LINUX_TEST_SRC([blk_sts_resv_conflict], [ 721315ee00fSMartin Matuska #include <linux/blkdev.h> 722315ee00fSMartin Matuska ],[ 723315ee00fSMartin Matuska blk_status_t s __attribute__ ((unused)) = BLK_STS_RESV_CONFLICT; 724315ee00fSMartin Matuska ]) 725315ee00fSMartin Matuska]) 726315ee00fSMartin Matuska 727315ee00fSMartin MatuskaAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT], [ 728315ee00fSMartin Matuska AC_MSG_CHECKING([whether BLK_STS_RESV_CONFLICT is defined]) 729315ee00fSMartin Matuska ZFS_LINUX_TEST_RESULT([blk_sts_resv_conflict], [ 730315ee00fSMartin Matuska AC_DEFINE(HAVE_BLK_STS_RESV_CONFLICT, 1, [BLK_STS_RESV_CONFLICT is defined]) 731315ee00fSMartin Matuska AC_MSG_RESULT(yes) 732315ee00fSMartin Matuska ], [ 733315ee00fSMartin Matuska AC_MSG_RESULT(no) 734315ee00fSMartin Matuska ]) 735315ee00fSMartin Matuska ]) 736315ee00fSMartin Matuska]) 737315ee00fSMartin Matuska 738eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [ 739eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH 740315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH_4ARG 741fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_OPEN_BY_PATH 7421719886fSMartin Matuska ZFS_AC_KERNEL_SRC_BDEV_FILE_OPEN_BY_PATH 743eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_PUT 744315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_PUT_HOLDER 745fd45b686SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_RELEASE 746eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART 747eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV 748eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV 749eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 750eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 7517877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE 7527877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 7537877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE 754*75e1fea6SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_NR_BYTES 755271171e0SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEVNAME 7561719886fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_ISSUE_DISCARD 757be181ee2SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_KOBJ 758be181ee2SMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_PART_TO_DEV 759315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_DISK_CHECK_MEDIA_CHANGE 760315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BLK_STS_RESV_CONFLICT 761315ee00fSMartin Matuska ZFS_AC_KERNEL_SRC_BLKDEV_BLK_MODE_T 762eda14cbcSMatt Macy]) 763eda14cbcSMatt Macy 764eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ 765eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH 766eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_PUT 767eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_REREAD_PART 768eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV 769eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV 770eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 771eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 7727877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE 7737877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 7747877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE 775*75e1fea6SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEV_NR_BYTES 776271171e0SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEVNAME 777681ce946SMartin Matuska ZFS_AC_KERNEL_BLKDEV_GET_ERESTARTSYS 7781719886fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_ISSUE_DISCARD 779be181ee2SMartin Matuska ZFS_AC_KERNEL_BLKDEV_BDEV_KOBJ 780be181ee2SMartin Matuska ZFS_AC_KERNEL_BLKDEV_PART_TO_DEV 781315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_DISK_CHECK_MEDIA_CHANGE 782315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_BLK_STS_RESV_CONFLICT 783315ee00fSMartin Matuska ZFS_AC_KERNEL_BLKDEV_BLK_MODE_T 784eda14cbcSMatt Macy]) 785