1*eda14cbcSMatt Macydnl # 2*eda14cbcSMatt Macydnl # 2.6.38 API change, 3*eda14cbcSMatt Macydnl # Added blkdev_get_by_path() 4*eda14cbcSMatt Macydnl # 5*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH], [ 6*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_get_by_path], [ 7*eda14cbcSMatt Macy #include <linux/fs.h> 8*eda14cbcSMatt Macy #include <linux/blkdev.h> 9*eda14cbcSMatt Macy ], [ 10*eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 11*eda14cbcSMatt Macy const char *path = "path"; 12*eda14cbcSMatt Macy fmode_t mode = 0; 13*eda14cbcSMatt Macy void *holder = NULL; 14*eda14cbcSMatt Macy 15*eda14cbcSMatt Macy bdev = blkdev_get_by_path(path, mode, holder); 16*eda14cbcSMatt Macy ]) 17*eda14cbcSMatt Macy]) 18*eda14cbcSMatt Macy 19*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH], [ 20*eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_get_by_path() exists]) 21*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_get_by_path], [ 22*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 23*eda14cbcSMatt Macy ], [ 24*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blkdev_get_by_path()]) 25*eda14cbcSMatt Macy ]) 26*eda14cbcSMatt Macy]) 27*eda14cbcSMatt Macy 28*eda14cbcSMatt Macydnl # 29*eda14cbcSMatt Macydnl # 2.6.38 API change, 30*eda14cbcSMatt Macydnl # Added blkdev_put() 31*eda14cbcSMatt Macydnl # 32*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_PUT], [ 33*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_put], [ 34*eda14cbcSMatt Macy #include <linux/fs.h> 35*eda14cbcSMatt Macy #include <linux/blkdev.h> 36*eda14cbcSMatt Macy ], [ 37*eda14cbcSMatt Macy struct block_device *bdev = NULL; 38*eda14cbcSMatt Macy fmode_t mode = 0; 39*eda14cbcSMatt Macy 40*eda14cbcSMatt Macy blkdev_put(bdev, mode); 41*eda14cbcSMatt Macy ]) 42*eda14cbcSMatt Macy]) 43*eda14cbcSMatt Macy 44*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_PUT], [ 45*eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_put() exists]) 46*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_put], [ 47*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 48*eda14cbcSMatt Macy ], [ 49*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([blkdev_put()]) 50*eda14cbcSMatt Macy ]) 51*eda14cbcSMatt Macy]) 52*eda14cbcSMatt Macy 53*eda14cbcSMatt Macydnl # 54*eda14cbcSMatt Macydnl # 4.1 API, exported blkdev_reread_part() symbol, back ported to the 55*eda14cbcSMatt Macydnl # 3.10.0 CentOS 7.x enterprise kernels. 56*eda14cbcSMatt Macydnl # 57*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART], [ 58*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([blkdev_reread_part], [ 59*eda14cbcSMatt Macy #include <linux/fs.h> 60*eda14cbcSMatt Macy #include <linux/blkdev.h> 61*eda14cbcSMatt Macy ], [ 62*eda14cbcSMatt Macy struct block_device *bdev = NULL; 63*eda14cbcSMatt Macy int error; 64*eda14cbcSMatt Macy 65*eda14cbcSMatt Macy error = blkdev_reread_part(bdev); 66*eda14cbcSMatt Macy ]) 67*eda14cbcSMatt Macy]) 68*eda14cbcSMatt Macy 69*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_REREAD_PART], [ 70*eda14cbcSMatt Macy AC_MSG_CHECKING([whether blkdev_reread_part() exists]) 71*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([blkdev_reread_part], [ 72*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 73*eda14cbcSMatt Macy AC_DEFINE(HAVE_BLKDEV_REREAD_PART, 1, 74*eda14cbcSMatt Macy [blkdev_reread_part() exists]) 75*eda14cbcSMatt Macy ], [ 76*eda14cbcSMatt Macy AC_MSG_RESULT(no) 77*eda14cbcSMatt Macy ]) 78*eda14cbcSMatt Macy]) 79*eda14cbcSMatt Macy 80*eda14cbcSMatt Macydnl # 81*eda14cbcSMatt Macydnl # 2.6.22 API change 82*eda14cbcSMatt Macydnl # Single argument invalidate_bdev() 83*eda14cbcSMatt Macydnl # 84*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV], [ 85*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([invalidate_bdev], [ 86*eda14cbcSMatt Macy #include <linux/buffer_head.h> 87*eda14cbcSMatt Macy #include <linux/blkdev.h> 88*eda14cbcSMatt Macy ],[ 89*eda14cbcSMatt Macy struct block_device *bdev = NULL; 90*eda14cbcSMatt Macy invalidate_bdev(bdev); 91*eda14cbcSMatt Macy ]) 92*eda14cbcSMatt Macy]) 93*eda14cbcSMatt Macy 94*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV], [ 95*eda14cbcSMatt Macy AC_MSG_CHECKING([whether invalidate_bdev() exists]) 96*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([invalidate_bdev], [ 97*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 98*eda14cbcSMatt Macy ],[ 99*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([invalidate_bdev()]) 100*eda14cbcSMatt Macy ]) 101*eda14cbcSMatt Macy]) 102*eda14cbcSMatt Macy 103*eda14cbcSMatt Macydnl # 104*eda14cbcSMatt Macydnl # 2.6.27, lookup_bdev() was exported. 105*eda14cbcSMatt Macydnl # 4.4.0-6.21 - lookup_bdev() takes 2 arguments. 106*eda14cbcSMatt Macydnl # 107*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV], [ 108*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_1arg], [ 109*eda14cbcSMatt Macy #include <linux/fs.h> 110*eda14cbcSMatt Macy #include <linux/blkdev.h> 111*eda14cbcSMatt Macy ], [ 112*eda14cbcSMatt Macy lookup_bdev(NULL); 113*eda14cbcSMatt Macy ]) 114*eda14cbcSMatt Macy 115*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([lookup_bdev_2args], [ 116*eda14cbcSMatt Macy #include <linux/fs.h> 117*eda14cbcSMatt Macy ], [ 118*eda14cbcSMatt Macy lookup_bdev(NULL, FMODE_READ); 119*eda14cbcSMatt Macy ]) 120*eda14cbcSMatt Macy]) 121*eda14cbcSMatt Macy 122*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV], [ 123*eda14cbcSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants 1 arg]) 124*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_1arg], 125*eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 126*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 127*eda14cbcSMatt Macy AC_DEFINE(HAVE_1ARG_LOOKUP_BDEV, 1, 128*eda14cbcSMatt Macy [lookup_bdev() wants 1 arg]) 129*eda14cbcSMatt Macy ], [ 130*eda14cbcSMatt Macy AC_MSG_RESULT(no) 131*eda14cbcSMatt Macy 132*eda14cbcSMatt Macy AC_MSG_CHECKING([whether lookup_bdev() wants 2 args]) 133*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT_SYMBOL([lookup_bdev_2args], 134*eda14cbcSMatt Macy [lookup_bdev], [fs/block_dev.c], [ 135*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 136*eda14cbcSMatt Macy AC_DEFINE(HAVE_2ARGS_LOOKUP_BDEV, 1, 137*eda14cbcSMatt Macy [lookup_bdev() wants 2 args]) 138*eda14cbcSMatt Macy ], [ 139*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([lookup_bdev()]) 140*eda14cbcSMatt Macy ]) 141*eda14cbcSMatt Macy ]) 142*eda14cbcSMatt Macy]) 143*eda14cbcSMatt Macy 144*eda14cbcSMatt Macydnl # 145*eda14cbcSMatt Macydnl # 2.6.30 API change 146*eda14cbcSMatt Macydnl # 147*eda14cbcSMatt Macydnl # The bdev_physical_block_size() interface was added to provide a way 148*eda14cbcSMatt Macydnl # to determine the smallest write which can be performed without a 149*eda14cbcSMatt Macydnl # read-modify-write operation. 150*eda14cbcSMatt Macydnl # 151*eda14cbcSMatt Macydnl # Unfortunately, this interface isn't entirely reliable because 152*eda14cbcSMatt Macydnl # drives are sometimes known to misreport this value. 153*eda14cbcSMatt Macydnl # 154*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 155*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_physical_block_size], [ 156*eda14cbcSMatt Macy #include <linux/blkdev.h> 157*eda14cbcSMatt Macy ],[ 158*eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 159*eda14cbcSMatt Macy bdev_physical_block_size(bdev); 160*eda14cbcSMatt Macy ]) 161*eda14cbcSMatt Macy]) 162*eda14cbcSMatt Macy 163*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE], [ 164*eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_physical_block_size() is available]) 165*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_physical_block_size], [ 166*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 167*eda14cbcSMatt Macy ],[ 168*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_physical_block_size()]) 169*eda14cbcSMatt Macy ]) 170*eda14cbcSMatt Macy]) 171*eda14cbcSMatt Macy 172*eda14cbcSMatt Macydnl # 173*eda14cbcSMatt Macydnl # 2.6.30 API change 174*eda14cbcSMatt Macydnl # Added bdev_logical_block_size(). 175*eda14cbcSMatt Macydnl # 176*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 177*eda14cbcSMatt Macy ZFS_LINUX_TEST_SRC([bdev_logical_block_size], [ 178*eda14cbcSMatt Macy #include <linux/blkdev.h> 179*eda14cbcSMatt Macy ],[ 180*eda14cbcSMatt Macy struct block_device *bdev __attribute__ ((unused)) = NULL; 181*eda14cbcSMatt Macy bdev_logical_block_size(bdev); 182*eda14cbcSMatt Macy ]) 183*eda14cbcSMatt Macy]) 184*eda14cbcSMatt Macy 185*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE], [ 186*eda14cbcSMatt Macy AC_MSG_CHECKING([whether bdev_logical_block_size() is available]) 187*eda14cbcSMatt Macy ZFS_LINUX_TEST_RESULT([bdev_logical_block_size], [ 188*eda14cbcSMatt Macy AC_MSG_RESULT(yes) 189*eda14cbcSMatt Macy ],[ 190*eda14cbcSMatt Macy ZFS_LINUX_TEST_ERROR([bdev_logical_block_size()]) 191*eda14cbcSMatt Macy ]) 192*eda14cbcSMatt Macy]) 193*eda14cbcSMatt Macy 194*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_SRC_BLKDEV], [ 195*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH 196*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_PUT 197*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART 198*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_INVALIDATE_BDEV 199*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_LOOKUP_BDEV 200*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 201*eda14cbcSMatt Macy ZFS_AC_KERNEL_SRC_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 202*eda14cbcSMatt Macy]) 203*eda14cbcSMatt Macy 204*eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_KERNEL_BLKDEV], [ 205*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH 206*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_PUT 207*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_REREAD_PART 208*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_INVALIDATE_BDEV 209*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_LOOKUP_BDEV 210*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_LOGICAL_BLOCK_SIZE 211*eda14cbcSMatt Macy ZFS_AC_KERNEL_BLKDEV_BDEV_PHYSICAL_BLOCK_SIZE 212*eda14cbcSMatt Macy]) 213