diff --git a/config/kernel-blk-queue.m4 b/config/kernel-blk-queue.m4 index 1dced82ce6..ff5d2d370e 100644 --- a/config/kernel-blk-queue.m4 +++ b/config/kernel-blk-queue.m4 @@ -47,6 +47,44 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_BDI], [ ]) ]) +dnl # +dnl # 5.9: added blk_queue_update_readahead(), +dnl # 5.15: renamed to disk_update_readahead() +dnl # +AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD], [ + ZFS_LINUX_TEST_SRC([blk_queue_update_readahead], [ + #include + ],[ + struct request_queue q; + blk_queue_update_readahead(&q); + ]) + + ZFS_LINUX_TEST_SRC([disk_update_readahead], [ + #include + ],[ + struct gendisk disk; + disk_update_readahead(&disk); + ]) +]) + +AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ + AC_MSG_CHECKING([whether blk_queue_update_readahead() exists]) + ZFS_LINUX_TEST_RESULT([blk_queue_update_readahead], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1, + [blk_queue_update_readahead() exists]) + ],[ + AC_MSG_CHECKING([whether disk_update_readahead() exists]) + ZFS_LINUX_TEST_RESULT([disk_update_readahead], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_DISK_UPDATE_READAHEAD, 1, + [disk_update_readahead() exists]) + ],[ + AC_MSG_RESULT(no) + ]) + ]) +]) + dnl # dnl # 2.6.32 API, dnl # blk_queue_discard() @@ -280,6 +318,7 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_MAX_SEGMENTS], [ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [ ZFS_AC_KERNEL_SRC_BLK_QUEUE_PLUG ZFS_AC_KERNEL_SRC_BLK_QUEUE_BDI + ZFS_AC_KERNEL_SRC_BLK_QUEUE_UPDATE_READAHEAD ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE ZFS_AC_KERNEL_SRC_BLK_QUEUE_FLAG_SET @@ -292,6 +331,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE], [ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE], [ ZFS_AC_KERNEL_BLK_QUEUE_PLUG ZFS_AC_KERNEL_BLK_QUEUE_BDI + ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD ZFS_AC_KERNEL_BLK_QUEUE_DISCARD ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE ZFS_AC_KERNEL_BLK_QUEUE_FLAG_SET diff --git a/include/os/linux/kernel/linux/blkdev_compat.h b/include/os/linux/kernel/linux/blkdev_compat.h index 87d5410720..019d5390ad 100644 --- a/include/os/linux/kernel/linux/blkdev_compat.h +++ b/include/os/linux/kernel/linux/blkdev_compat.h @@ -92,11 +92,14 @@ blk_queue_set_write_cache(struct request_queue *q, bool wc, bool fua) static inline void blk_queue_set_read_ahead(struct request_queue *q, unsigned long ra_pages) { +#if !defined(HAVE_BLK_QUEUE_UPDATE_READAHEAD) && \ + !defined(HAVE_DISK_UPDATE_READAHEAD) #ifdef HAVE_BLK_QUEUE_BDI_DYNAMIC q->backing_dev_info->ra_pages = ra_pages; #else q->backing_dev_info.ra_pages = ra_pages; #endif +#endif } #ifdef HAVE_BIO_BVEC_ITER