From 04df02380df6a4aa5ef3554286e71d2bfa4e0aa5 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Fri, 24 Sep 2021 11:37:00 +0200 Subject: [PATCH] Update to ZFS 2.1.1 This change updates the ZFS version to 2.1.1 which supports kernels 3.10 to 5.14. --- debian/patches/series.zfs | 2 - .../zfs/0010-linux-5.14-compat-pg-dirty.patch | 84 ----------- ...011-linux-5.14-compat-blk_alloc_disk.patch | 133 ------------------ zfs | 2 +- 4 files changed, 1 insertion(+), 220 deletions(-) delete mode 100644 debian/patches/zfs/0010-linux-5.14-compat-pg-dirty.patch delete mode 100644 debian/patches/zfs/0011-linux-5.14-compat-blk_alloc_disk.patch diff --git a/debian/patches/series.zfs b/debian/patches/series.zfs index 273cacc..67a08e2 100644 --- a/debian/patches/series.zfs +++ b/debian/patches/series.zfs @@ -7,5 +7,3 @@ zfs/0006-dont-symlink-zed-scripts.patch zfs/0007-Use-installed-python3.patch zfs/0008-Add-systemd-unit-for-importing-specific-pools.patch zfs/0009-Patch-move-manpage-arcstat-1-to-arcstat-8.patch -zfs/0010-linux-5.14-compat-pg-dirty.patch -zfs/0011-linux-5.14-compat-blk_alloc_disk.patch diff --git a/debian/patches/zfs/0010-linux-5.14-compat-pg-dirty.patch b/debian/patches/zfs/0010-linux-5.14-compat-pg-dirty.patch deleted file mode 100644 index 27c254e..0000000 --- a/debian/patches/zfs/0010-linux-5.14-compat-pg-dirty.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff --git a/config/kernel-vfs-set_page_dirty.m4 b/config/kernel-vfs-set_page_dirty.m4 -new file mode 100644 -index 00000000000..a9d252e4e01 ---- /dev/null -+++ b/config/kernel-vfs-set_page_dirty.m4 -@@ -0,0 +1,34 @@ -+dnl # -+dnl # Linux 5.14 adds a change to require set_page_dirty to be manually -+dnl # wired up in struct address_space_operations. Determine if this needs -+dnl # to be done. This patch set also introduced __set_page_dirty_nobuffers -+dnl # declaration in linux/pagemap.h, so these tests look for the presence -+dnl # of that function to tell the compiler to assign set_page_dirty in -+dnl # module/os/linux/zfs/zpl_file.c -+dnl # -+AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS], [ -+ ZFS_LINUX_TEST_SRC([vfs_has_set_page_dirty_nobuffers], [ -+ #include -+ #include -+ -+ static const struct address_space_operations -+ aops __attribute__ ((unused)) = { -+ .set_page_dirty = __set_page_dirty_nobuffers, -+ }; -+ ],[]) -+]) -+ -+AC_DEFUN([ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS], [ -+ dnl # -+ dnl # Linux 5.14 change requires set_page_dirty() to be assigned -+ dnl # in address_space_operations() -+ dnl # -+ AC_MSG_CHECKING([__set_page_dirty_nobuffers exists]) -+ ZFS_LINUX_TEST_RESULT([vfs_has_set_page_dirty_nobuffers], [ -+ AC_MSG_RESULT([yes]) -+ AC_DEFINE(HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS, 1, -+ [__set_page_dirty_nobuffers exists]) -+ ],[ -+ AC_MSG_RESULT([no]) -+ ]) -+]) -diff --git a/config/kernel.m4 b/config/kernel.m4 -index 7196e66ca28..5ea2286dbcc 100644 ---- a/config/kernel.m4 -+++ b/config/kernel.m4 -@@ -132,6 +132,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ - ZFS_AC_KERNEL_SRC_SIGNAL_STOP - ZFS_AC_KERNEL_SRC_SIGINFO - ZFS_AC_KERNEL_SRC_SET_SPECIAL_STATE -+ ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS - - AC_MSG_CHECKING([for available kernel interfaces]) - ZFS_LINUX_TEST_COMPILE_ALL([kabi]) -@@ -237,6 +238,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ - ZFS_AC_KERNEL_SIGNAL_STOP - ZFS_AC_KERNEL_SIGINFO - ZFS_AC_KERNEL_SET_SPECIAL_STATE -+ ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS - ]) - - dnl # -diff --git a/module/os/linux/zfs/zpl_file.c b/module/os/linux/zfs/zpl_file.c -index 0319148b983..63002fe3b93 100644 ---- a/module/os/linux/zfs/zpl_file.c -+++ b/module/os/linux/zfs/zpl_file.c -@@ -33,6 +33,9 @@ - #include - #include - #include -+#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS -+#include -+#endif - - /* - * When using fallocate(2) to preallocate space, inflate the requested -@@ -1018,6 +1021,9 @@ const struct address_space_operations zpl_address_space_operations = { - .writepage = zpl_writepage, - .writepages = zpl_writepages, - .direct_IO = zpl_direct_IO, -+#ifdef HAVE_VFS_SET_PAGE_DIRTY_NOBUFFERS -+ .set_page_dirty = __set_page_dirty_nobuffers, -+#endif - }; - - const struct file_operations zpl_file_operations = { \ No newline at end of file diff --git a/debian/patches/zfs/0011-linux-5.14-compat-blk_alloc_disk.patch b/debian/patches/zfs/0011-linux-5.14-compat-blk_alloc_disk.patch deleted file mode 100644 index 201aef2..0000000 --- a/debian/patches/zfs/0011-linux-5.14-compat-blk_alloc_disk.patch +++ /dev/null @@ -1,133 +0,0 @@ -diff --git a/config/kernel-make-request-fn.m4 b/config/kernel-make-request-fn.m4 -index 290ef6b8da7..86b202a7a27 100644 ---- a/config/kernel-make-request-fn.m4 -+++ b/config/kernel-make-request-fn.m4 -@@ -42,6 +42,13 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_MAKE_REQUEST_FN], [ - struct block_device_operations o; - o.submit_bio = NULL; - ]) -+ -+ ZFS_LINUX_TEST_SRC([blk_alloc_disk], [ -+ #include -+ ],[ -+ struct gendisk *disk __attribute__ ((unused)); -+ disk = blk_alloc_disk(NUMA_NO_NODE); -+ ]) - ]) - - AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ -@@ -56,6 +63,19 @@ AC_DEFUN([ZFS_AC_KERNEL_MAKE_REQUEST_FN], [ - - AC_DEFINE(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS, 1, - [submit_bio is member of struct block_device_operations]) -+ -+ dnl # -+ dnl # Linux 5.14 API Change: -+ dnl # blk_alloc_queue() + alloc_disk() combo replaced by -+ dnl # a single call to blk_alloc_disk(). -+ dnl # -+ AC_MSG_CHECKING([whether blk_alloc_disk() exists]) -+ ZFS_LINUX_TEST_RESULT([blk_alloc_disk], [ -+ AC_MSG_RESULT(yes) -+ AC_DEFINE([HAVE_BLK_ALLOC_DISK], 1, [blk_alloc_disk() exists]) -+ ], [ -+ AC_MSG_RESULT(no) -+ ]) - ],[ - AC_MSG_RESULT(no) - -diff --git a/module/os/linux/zfs/zvol_os.c b/module/os/linux/zfs/zvol_os.c -index 741979f11af..8b29d73a3e0 100644 ---- a/module/os/linux/zfs/zvol_os.c -+++ b/module/os/linux/zfs/zvol_os.c -@@ -762,7 +762,7 @@ static struct block_device_operations zvol_ops = { - .getgeo = zvol_getgeo, - .owner = THIS_MODULE, - #ifdef HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS -- .submit_bio = zvol_submit_bio, -+ .submit_bio = zvol_submit_bio, - #endif - }; - -@@ -795,13 +795,40 @@ zvol_alloc(dev_t dev, const char *name) - mutex_init(&zv->zv_state_lock, NULL, MUTEX_DEFAULT, NULL); - - #ifdef HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS -+#ifdef HAVE_BLK_ALLOC_DISK -+ zso->zvo_disk = blk_alloc_disk(NUMA_NO_NODE); -+ if (zso->zvo_disk == NULL) -+ goto out_kmem; -+ -+ zso->zvo_disk->minors = ZVOL_MINORS; -+ zso->zvo_queue = zso->zvo_disk->queue; -+#else - zso->zvo_queue = blk_alloc_queue(NUMA_NO_NODE); -+ if (zso->zvo_queue == NULL) -+ goto out_kmem; -+ -+ zso->zvo_disk = alloc_disk(ZVOL_MINORS); -+ if (zso->zvo_disk == NULL) { -+ blk_cleanup_queue(zso->zvo_queue); -+ goto out_kmem; -+ } -+ -+ zso->zvo_disk->queue = zso->zvo_queue; -+#endif /* HAVE_BLK_ALLOC_DISK */ - #else - zso->zvo_queue = blk_generic_alloc_queue(zvol_request, NUMA_NO_NODE); --#endif - if (zso->zvo_queue == NULL) - goto out_kmem; - -+ zso->zvo_disk = alloc_disk(ZVOL_MINORS); -+ if (zso->zvo_disk == NULL) { -+ blk_cleanup_queue(zso->zvo_queue); -+ goto out_kmem; -+ } -+ -+ zso->zvo_disk->queue = zso->zvo_queue; -+#endif /* HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS */ -+ - blk_queue_set_write_cache(zso->zvo_queue, B_TRUE, B_TRUE); - - /* Limit read-ahead to a single page to prevent over-prefetching. */ -@@ -810,10 +837,6 @@ zvol_alloc(dev_t dev, const char *name) - /* Disable write merging in favor of the ZIO pipeline. */ - blk_queue_flag_set(QUEUE_FLAG_NOMERGES, zso->zvo_queue); - -- zso->zvo_disk = alloc_disk(ZVOL_MINORS); -- if (zso->zvo_disk == NULL) -- goto out_queue; -- - zso->zvo_queue->queuedata = zv; - zso->zvo_dev = dev; - zv->zv_open_count = 0; -@@ -844,14 +867,11 @@ zvol_alloc(dev_t dev, const char *name) - zso->zvo_disk->first_minor = (dev & MINORMASK); - zso->zvo_disk->fops = &zvol_ops; - zso->zvo_disk->private_data = zv; -- zso->zvo_disk->queue = zso->zvo_queue; - snprintf(zso->zvo_disk->disk_name, DISK_NAME_LEN, "%s%d", - ZVOL_DEV_NAME, (dev & MINORMASK)); - - return (zv); - --out_queue: -- blk_cleanup_queue(zso->zvo_queue); - out_kmem: - kmem_free(zso, sizeof (struct zvol_state_os)); - kmem_free(zv, sizeof (zvol_state_t)); -@@ -882,8 +902,13 @@ zvol_free(zvol_state_t *zv) - zfs_rangelock_fini(&zv->zv_rangelock); - - del_gendisk(zv->zv_zso->zvo_disk); -+#if defined(HAVE_SUBMIT_BIO_IN_BLOCK_DEVICE_OPERATIONS) && \ -+ defined(HAVE_BLK_ALLOC_DISK) -+ blk_cleanup_disk(zv->zv_zso->zvo_disk); -+#else - blk_cleanup_queue(zv->zv_zso->zvo_queue); - put_disk(zv->zv_zso->zvo_disk); -+#endif - - ida_simple_remove(&zvol_ida, - MINOR(zv->zv_zso->zvo_dev) >> ZVOL_MINOR_BITS); \ No newline at end of file diff --git a/zfs b/zfs index 4f92fe0..71c6098 160000 --- a/zfs +++ b/zfs @@ -1 +1 @@ -Subproject commit 4f92fe0f5c822f6802c6ec675809d7c112a46f2e +Subproject commit 71c6098526c6d5fbfa84a58cefe6cdc403488d8c