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 19eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [ 20eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_get_by_path() exists]) 21eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [ 22eda14cbcSMatt Macy AC_MSG_RESULT(yes) 23eda14cbcSMatt Macy ], [ 24eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()]) 25eda14cbcSMatt Macy ]) 26eda14cbcSMatt Macy]) 27eda14cbcSMatt Macy 28eda14cbcSMatt Macydnl # 29eda14cbcSMatt Macydnl # 2.6.38 API change, 30eda14cbcSMatt Macydnl # Added blkdev_put() 31eda14cbcSMatt Macydnl # 32eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [ 33eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_put], [ 34eda14cbcSMatt Macy #include <linux/fs.h> 35eda14cbcSMatt Macy #include <linux/blkdev.h> 36eda14cbcSMatt Macy ], [ 37eda14cbcSMatt Macy struct block_device *bdev = NULL; 38eda14cbcSMatt Macy fmode_t mode = 0; 39eda14cbcSMatt Macy 40eda14cbcSMatt Macy blkdev_put(bdev, mode); 41eda14cbcSMatt Macy ]) 42eda14cbcSMatt Macy]) 43eda14cbcSMatt Macy 44eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [ 45eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_put() exists]) 46eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_put], [ 47eda14cbcSMatt Macy AC_MSG_RESULT(yes) 48eda14cbcSMatt Macy ], [ 49eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blkdev_put()]) 50eda14cbcSMatt Macy ]) 51eda14cbcSMatt Macy]) 52eda14cbcSMatt Macy 53eda14cbcSMatt Macydnl # 54eda14cbcSMatt Macydnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the 55eda14cbcSMatt Macydnl # 3.10.0 CentOS 7.x enterprise kernels. 56eda14cbcSMatt Macydnl # 57eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [ 58eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_reread_part], [ 59eda14cbcSMatt Macy #include <linux/fs.h> 60eda14cbcSMatt Macy #include <linux/blkdev.h> 61eda14cbcSMatt Macy ], [ 62eda14cbcSMatt Macy struct block_device *bdev = NULL; 63eda14cbcSMatt Macy int error; 64eda14cbcSMatt Macy 65eda14cbcSMatt Macy error = blkdev_reread_part(bdev); 66eda14cbcSMatt Macy ]) 67eda14cbcSMatt Macy]) 68eda14cbcSMatt Macy 69eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [ 70eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_reread_part() exists]) 71eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [ 72eda14cbcSMatt Macy AC_MSG_RESULT(yes) 73eda14cbcSMatt Macy AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1, 74eda14cbcSMatt Macy [blkdev_reread_part() exists]) 75eda14cbcSMatt Macy ], [ 76eda14cbcSMatt Macy AC_MSG_RESULT(no) 77eda14cbcSMatt Macy ]) 78eda14cbcSMatt Macy]) 79eda14cbcSMatt Macy 80eda14cbcSMatt Macydnl # 81*7877fdebSMatt Macydnl # check_disk_change() was removed in 5.10 82*7877fdebSMatt Macydnl # 83*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE], [ 84*7877fdebSMatt Macy ZFS_LINUX_TEST_SRC([check_disk_change], [ 85*7877fdebSMatt Macy #include <linux/fs.h> 86*7877fdebSMatt Macy #include <linux/blkdev.h> 87*7877fdebSMatt Macy ], [ 88*7877fdebSMatt Macy struct block_device *bdev = NULL; 89*7877fdebSMatt Macy bool error; 90*7877fdebSMatt Macy 91*7877fdebSMatt Macy error = check_disk_change(bdev); 92*7877fdebSMatt Macy ]) 93*7877fdebSMatt Macy]) 94*7877fdebSMatt Macy 95*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE], [ 96*7877fdebSMatt Macy AC_MSG_CHECKING([whether check_disk_change() exists]) 97*7877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([check_disk_change], [ 98*7877fdebSMatt Macy AC_MSG_RESULT(yes) 99*7877fdebSMatt Macy AC_DEFINE(HAVE_CHECK_DISK_CHANGE, 1, 100*7877fdebSMatt Macy [check_disk_change() exists]) 101*7877fdebSMatt Macy ], [ 102*7877fdebSMatt Macy AC_MSG_RESULT(no) 103*7877fdebSMatt Macy ]) 104*7877fdebSMatt Macy]) 105*7877fdebSMatt Macy 106*7877fdebSMatt Macydnl # 107*7877fdebSMatt Macydnl # 5.10 API, check_disk_change() is removed, in favor of 108*7877fdebSMatt Macydnl # bdev_check_media_change(), which doesn't force revalidation 109*7877fdebSMatt Macydnl # 110*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [ 111*7877fdebSMatt Macy ZFS_LINUX_TEST_SRC([bdev_check_media_change], [ 112*7877fdebSMatt Macy #include <linux/fs.h> 113*7877fdebSMatt Macy #include <linux/blkdev.h> 114*7877fdebSMatt Macy ], [ 115*7877fdebSMatt Macy struct block_device *bdev = NULL; 116*7877fdebSMatt Macy int error; 117*7877fdebSMatt Macy 118*7877fdebSMatt Macy error = bdev_check_media_change(bdev); 119*7877fdebSMatt Macy ]) 120*7877fdebSMatt Macy]) 121*7877fdebSMatt Macy 122*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE], [ 123*7877fdebSMatt Macy AC_MSG_CHECKING([whether bdev_disk_changed() exists]) 124*7877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_check_media_change], [ 125*7877fdebSMatt Macy AC_MSG_RESULT(yes) 126*7877fdebSMatt Macy AC_DEFINE(HAVE_BDEV_CHECK_MEDIA_CHANGE, 1, 127*7877fdebSMatt Macy [bdev_check_media_change() exists]) 128*7877fdebSMatt Macy ], [ 129*7877fdebSMatt Macy AC_MSG_RESULT(no) 130*7877fdebSMatt Macy ]) 131*7877fdebSMatt Macy]) 132*7877fdebSMatt Macy 133*7877fdebSMatt Macydnl # 134eda14cbcSMatt Macydnl # 2.6.22 API change 135eda14cbcSMatt Macydnl # Single argument invalidate_bdev() 136eda14cbcSMatt Macydnl # 137eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [ 138eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([invalidate_bdev], [ 139eda14cbcSMatt Macy #include <linux/buffer_head.h> 140eda14cbcSMatt Macy #include <linux/blkdev.h> 141eda14cbcSMatt Macy ],[ 142eda14cbcSMatt Macy struct block_device *bdev = NULL; 143eda14cbcSMatt Macy invalidate_bdev(bdev); 144eda14cbcSMatt Macy ]) 145eda14cbcSMatt Macy]) 146eda14cbcSMatt Macy 147eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [ 148eda14cbcSMatt Macy AC_MSG_CHECKING([whether invalidate_bdev() exists]) 149eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([invalidate_bdev], [ 150eda14cbcSMatt Macy AC_MSG_RESULT(yes) 151eda14cbcSMatt Macy ],[ 152eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([invalidate_bdev()]) 153eda14cbcSMatt Macy ]) 154eda14cbcSMatt Macy]) 155eda14cbcSMatt Macy 156eda14cbcSMatt Macydnl # 157*7877fdebSMatt Macydnl # 5.11 API, lookup_bdev() takes dev_t argument. 158*7877fdebSMatt Macydnl # 2.6.27 API, lookup_bdev() was first exported. 159*7877fdebSMatt Macydnl # 4.4.0-6.21 API, lookup_bdev() on Ubuntu takes mode argument. 160eda14cbcSMatt Macydnl # 161eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [ 162*7877fdebSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_devt], [ 163*7877fdebSMatt Macy #include <linux/blkdev.h> 164*7877fdebSMatt Macy ], [ 165*7877fdebSMatt Macy int error __attribute__ ((unused)); 166*7877fdebSMatt Macy const char path[] = "/example/path"; 167*7877fdebSMatt Macy dev_t dev; 168*7877fdebSMatt Macy 169*7877fdebSMatt Macy error = lookup_bdev(path, &dev); 170*7877fdebSMatt Macy ]) 171*7877fdebSMatt Macy 172eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [ 173eda14cbcSMatt Macy #include <linux/fs.h> 174eda14cbcSMatt Macy #include <linux/blkdev.h> 175eda14cbcSMatt Macy ], [ 176*7877fdebSMatt Macy struct block_device *bdev __attribute__ ((unused)); 177*7877fdebSMatt Macy const char path[] = "/example/path"; 178*7877fdebSMatt Macy 179*7877fdebSMatt Macy bdev = lookup_bdev(path); 180eda14cbcSMatt Macy ]) 181eda14cbcSMatt Macy 182*7877fdebSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_mode], [ 183eda14cbcSMatt Macy #include <linux/fs.h> 184eda14cbcSMatt Macy ], [ 185*7877fdebSMatt Macy struct block_device *bdev __attribute__ ((unused)); 186*7877fdebSMatt Macy const char path[] = "/example/path"; 187*7877fdebSMatt Macy 188*7877fdebSMatt Macy bdev = lookup_bdev(path, FMODE_READ); 189eda14cbcSMatt Macy ]) 190eda14cbcSMatt Macy]) 191eda14cbcSMatt Macy 192eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [ 193*7877fdebSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants dev_t arg]) 194*7877fdebSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_devt], 195*7877fdebSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 196*7877fdebSMatt Macy AC_MSG_RESULT(yes) 197*7877fdebSMatt Macy AC_DEFINE(HAVE_DEVT_LOOKUP_BDEV, 1, 198*7877fdebSMatt Macy [lookup_bdev() wants dev_t arg]) 199*7877fdebSMatt Macy ], [ 200*7877fdebSMatt Macy AC_MSG_RESULT(no) 201*7877fdebSMatt Macy 202eda14cbcSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) 203eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], 204eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 205eda14cbcSMatt Macy AC_MSG_RESULT(yes) 206eda14cbcSMatt Macy AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, 207eda14cbcSMatt Macy [lookup_bdev() wants 1 arg]) 208eda14cbcSMatt Macy ], [ 209eda14cbcSMatt Macy AC_MSG_RESULT(no) 210eda14cbcSMatt Macy 211*7877fdebSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants mode arg]) 212*7877fdebSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_mode], 213eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 214eda14cbcSMatt Macy AC_MSG_RESULT(yes) 215*7877fdebSMatt Macy AC_DEFINE(HAVE_MODE_LOOKUP_BDEV, 1, 216*7877fdebSMatt Macy [lookup_bdev() wants mode arg]) 217eda14cbcSMatt Macy ], [ 218eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([lookup_bdev()]) 219eda14cbcSMatt Macy ]) 220eda14cbcSMatt Macy ]) 221eda14cbcSMatt Macy ]) 222*7877fdebSMatt Macy]) 223eda14cbcSMatt Macy 224eda14cbcSMatt Macydnl # 225eda14cbcSMatt Macydnl # 2.6.30 API change 226eda14cbcSMatt Macydnl # 227eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way 228eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a 229eda14cbcSMatt Macydnl # read-modify-write operation. 230eda14cbcSMatt Macydnl # 231eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because 232eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value. 233eda14cbcSMatt Macydnl # 234eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 235eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [ 236eda14cbcSMatt Macy #include <linux/blkdev.h> 237eda14cbcSMatt Macy ],[ 238eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 239eda14cbcSMatt Macy bdev_physical_block_size(bdev); 240eda14cbcSMatt Macy ]) 241eda14cbcSMatt Macy]) 242eda14cbcSMatt Macy 243eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 244eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_physical_block_size() is available]) 245eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [ 246eda14cbcSMatt Macy AC_MSG_RESULT(yes) 247eda14cbcSMatt Macy ],[ 248eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()]) 249eda14cbcSMatt Macy ]) 250eda14cbcSMatt Macy]) 251eda14cbcSMatt Macy 252eda14cbcSMatt Macydnl # 253eda14cbcSMatt Macydnl # 2.6.30 API change 254eda14cbcSMatt Macydnl # Added bdev_logical_block_size(). 255eda14cbcSMatt Macydnl # 256eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 257eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [ 258eda14cbcSMatt Macy #include <linux/blkdev.h> 259eda14cbcSMatt Macy ],[ 260eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 261eda14cbcSMatt Macy bdev_logical_block_size(bdev); 262eda14cbcSMatt Macy ]) 263eda14cbcSMatt Macy]) 264eda14cbcSMatt Macy 265eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 266eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_logical_block_size() is available]) 267eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [ 268eda14cbcSMatt Macy AC_MSG_RESULT(yes) 269eda14cbcSMatt Macy ],[ 270eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()]) 271eda14cbcSMatt Macy ]) 272eda14cbcSMatt Macy]) 273eda14cbcSMatt Macy 274*7877fdebSMatt Macydnl # 275*7877fdebSMatt Macydnl # 5.11 API change 276*7877fdebSMatt Macydnl # Added bdev_whole() helper. 277*7877fdebSMatt Macydnl # 278*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE], [ 279*7877fdebSMatt Macy ZFS_LINUX_TEST_SRC([bdev_whole], [ 280*7877fdebSMatt Macy #include <linux/blkdev.h> 281*7877fdebSMatt Macy ],[ 282*7877fdebSMatt Macy struct block_device *bdev = NULL; 283*7877fdebSMatt Macy bdev = bdev_whole(bdev); 284*7877fdebSMatt Macy ]) 285*7877fdebSMatt Macy]) 286*7877fdebSMatt Macy 287*7877fdebSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE], [ 288*7877fdebSMatt Macy AC_MSG_CHECKING([whether bdev_whole() is available]) 289*7877fdebSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_whole], [ 290*7877fdebSMatt Macy AC_MSG_RESULT(yes) 291*7877fdebSMatt Macy AC_DEFINE(HAVE_BDEV_WHOLE, 1, [bdev_whole() is available]) 292*7877fdebSMatt Macy ],[ 293*7877fdebSMatt Macy AC_MSG_RESULT(no) 294*7877fdebSMatt Macy ]) 295*7877fdebSMatt Macy]) 296*7877fdebSMatt Macy 297eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [ 298eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH 299eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_PUT 300eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART 301eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV 302eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV 303eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 304eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 305*7877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_CHECK_DISK_CHANGE 306*7877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 307*7877fdebSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_WHOLE 308eda14cbcSMatt Macy]) 309eda14cbcSMatt Macy 310eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ 311eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH 312eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_PUT 313eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_REREAD_PART 314eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV 315eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV 316eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 317eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 318*7877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_CHECK_DISK_CHANGE 319*7877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_CHECK_MEDIA_CHANGE 320*7877fdebSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_WHOLE 321eda14cbcSMatt Macy]) 322