diff --git a/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch b/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch index 6a89fe3..0fdbe9d 100644 --- a/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch +++ b/debian/patches/0001-Check-for-META-and-DCH-consistency-in-autoconf.patch @@ -4,6 +4,7 @@ From: Debian ZFS on Linux maintainers Date: Wed, 30 Jan 2019 15:12:04 +0100 Subject: [PATCH] Check-for-META-and-DCH-consistency-in-autoconf +Signed-off-by: Thomas Lamprecht --- config/zfs-meta.m4 | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/debian/patches/0002-always-load-ZFS-module-on-boot.patch b/debian/patches/0002-always-load-ZFS-module-on-boot.patch index 46a24ba..2ff27f4 100644 --- a/debian/patches/0002-always-load-ZFS-module-on-boot.patch +++ b/debian/patches/0002-always-load-ZFS-module-on-boot.patch @@ -13,6 +13,7 @@ not actually used. Signed-off-by: Fabian Grünbichler Signed-off-by: Stoiko Ivanov +Signed-off-by: Thomas Lamprecht --- etc/modules-load.d/zfs.conf.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch b/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch index 4714094..bd794ac 100644 --- a/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch +++ b/debian/patches/0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch @@ -6,6 +6,8 @@ Subject: [PATCH] Fix the path to the zed binary on the systemd unit. We install zed into /usr/sbin manually meanwhile the upstream default is installing it into /sbin. Ubuntu packages also install zed to /usr/sbin, but they ship their own zfs-zed unit. + +Signed-off-by: Thomas Lamprecht --- etc/systemd/system/zfs-zed.service.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/patches/0005-import-with-d-dev-disk-by-id-in-scan-service.patch b/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch similarity index 94% rename from debian/patches/0005-import-with-d-dev-disk-by-id-in-scan-service.patch rename to debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch index 5075b8b..e1f3360 100644 --- a/debian/patches/0005-import-with-d-dev-disk-by-id-in-scan-service.patch +++ b/debian/patches/0004-import-with-d-dev-disk-by-id-in-scan-service.patch @@ -8,6 +8,7 @@ Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Grünbichler Signed-off-by: Stoiko Ivanov +Signed-off-by: Thomas Lamprecht --- etc/systemd/system/zfs-import-scan.service.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/patches/0004-increase-default-zcmd-allocation-to-256K.patch b/debian/patches/0004-increase-default-zcmd-allocation-to-256K.patch deleted file mode 100644 index a260280..0000000 --- a/debian/patches/0004-increase-default-zcmd-allocation-to-256K.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Colin Ian King -Date: Tue, 31 Oct 2017 19:12:42 +0800 -Subject: [PATCH] increase-default-zcmd-allocation-to-256K - -Increase default zcmd allocation to 256K (LP: #567557) - -When creating hundreds of clones (for example using containers with -LXD) cloning slows down as the number of clones increases over time. -The reason for this is that the fetching of the clone information -using a small zcmd buffer requires two ioctl calls, one to determine -the size and a second to return the data. However, this requires -gathering the data twice, once to determine the size and again to -populate the zcmd buffer to return it to userspace. - -These are expensive ioctl() calls, so instead, make the default buffer -size much larger: 256K. This may sound large, but on 64 bit systems -running ZFS this is not a huge chunk of memory for the speed -improvement we gains for large sets of clones: - - 16K zcmd 256K zcmd -Clones Time Clones Time Clone % improvement - (secs) per sec (secs) per sec -100 7 14.29 5 20.00 28.57 -200 10 20.00 9 22.22 10.00 -300 19 15.79 18 16.67 5.26 -400 22 18.18 22 18.18 0.00 -500 29 17.24 29 17.24 0.00 -600 39 15.38 39 15.38 0.00 -700 46 15.22 45 15.56 2.17 -800 58 13.79 51 15.69 12.07 -900 74 12.16 61 14.75 17.57 -1000 90 11.11 74 13.51 17.78 -1100 98 11.22 87 12.64 11.22 -1200 102 11.76 95 12.63 6.86 -1300 113 11.50 104 12.50 7.96 -1400 143 9.79 109 12.84 23.78 -1500 145 10.34 132 11.36 8.97 -1600 165 9.70 145 11.03 12.12 -1700 187 9.09 156 10.90 16.58 -1800 210 8.57 166 10.84 20.95 -1900 226 8.41 183 10.38 19.03 -2000 256 7.81 198 10.10 22.66 -2200 311 7.07 238 9.24 23.47 -2400 373 6.43 271 8.86 27.35 -2600 487 5.34 316 8.23 35.11 -3000 619 4.85 426 7.04 31.18 -3400 915 3.72 549 6.19 40.00 -4000 1332 3.00 923 4.33 30.71 - -As one can see, with > 2000 clones we get 25-40% speed -improvement. - -This patch was originally suggested by Brian Behlendorf -(see https://github.com/zfsonlinux/zfs/issues/6372), however -this fix is a more generic fix to cover all zcmd cases. - -Signed-off-by: Colin Ian King ---- - lib/libzfs/libzfs_util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/libzfs/libzfs_util.c b/lib/libzfs/libzfs_util.c -index 19bb57ad4..2a069ffe6 100644 ---- a/lib/libzfs/libzfs_util.c -+++ b/lib/libzfs/libzfs_util.c -@@ -1134,7 +1134,7 @@ int - zcmd_alloc_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, size_t len) - { - if (len == 0) -- len = 16 * 1024; -+ len = 256 * 1024; - zc->zc_nvlist_dst_size = len; - zc->zc_nvlist_dst = - (uint64_t)(uintptr_t)zfs_alloc(hdl, zc->zc_nvlist_dst_size); diff --git a/debian/patches/0006-Enable-zed-emails.patch b/debian/patches/0005-Enable-zed-emails.patch similarity index 94% rename from debian/patches/0006-Enable-zed-emails.patch rename to debian/patches/0005-Enable-zed-emails.patch index ed40ff1..ffbd21d 100644 --- a/debian/patches/0006-Enable-zed-emails.patch +++ b/debian/patches/0005-Enable-zed-emails.patch @@ -6,6 +6,8 @@ Subject: [PATCH] Enable zed emails The OpenZFS event daemon monitors pools. This patch enables the email sending function by default (if zed is installed). This is consistent with the default behavior of mdadm. + +Signed-off-by: Thomas Lamprecht --- cmd/zed/zed.d/zed.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/patches/0008-Linux-5.0-compat-SIMD-compatibility.patch b/debian/patches/0006-Linux-5.0-compat-SIMD-compatibility.patch similarity index 96% rename from debian/patches/0008-Linux-5.0-compat-SIMD-compatibility.patch rename to debian/patches/0006-Linux-5.0-compat-SIMD-compatibility.patch index 9b25e0c..d85991d 100644 --- a/debian/patches/0008-Linux-5.0-compat-SIMD-compatibility.patch +++ b/debian/patches/0006-Linux-5.0-compat-SIMD-compatibility.patch @@ -61,20 +61,22 @@ Closes #8793 Closes #8965 (cherry picked from commit e5db31349484e5e859c7a942eb15b98d68ce5b4d) Signed-off-by: Fabian Grünbichler +Signed-off-by: Thomas Lamprecht --- + cmd/ztest/ztest.c | 3 + + config/kernel-fpu.m4 | 46 ++++- include/linux/Makefile.am | 1 + include/linux/simd.h | 41 +++++ include/linux/simd_aarch64.h | 18 +- include/linux/simd_x86.h | 192 +++++++++++++------- include/sys/vdev_raidz.h | 2 +- include/sys/vdev_raidz_impl.h | 2 +- - module/icp/include/aes/aes_impl.h | 6 +- - module/icp/include/modes/gcm_impl.h | 6 +- - cmd/ztest/ztest.c | 3 + module/icp/algs/aes/aes_impl.c | 34 ++-- module/icp/algs/aes/aes_impl_aesni.c | 2 +- module/icp/algs/modes/gcm.c | 41 +++-- module/icp/algs/modes/gcm_pclmulqdq.c | 2 +- + module/icp/include/aes/aes_impl.h | 6 +- + module/icp/include/modes/gcm_impl.h | 6 +- module/icp/io/aes.c | 32 +++- module/spl/spl-taskq.c | 2 + module/spl/spl-thread.c | 2 + @@ -91,10 +93,95 @@ Signed-off-by: Fabian Grünbichler module/zfs/vdev_raidz_math_avx512f.c | 5 +- module/zfs/vdev_raidz_math_sse2.c | 2 +- module/zfs/vdev_raidz_math_ssse3.c | 4 +- - config/kernel-fpu.m4 | 46 ++++- 30 files changed, 454 insertions(+), 204 deletions(-) create mode 100644 include/linux/simd.h +diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c +index 3bf840d88..dc22faef7 100644 +--- a/cmd/ztest/ztest.c ++++ b/cmd/ztest/ztest.c +@@ -107,6 +107,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -7110,6 +7111,8 @@ ztest_run(ztest_shared_t *zs) + metaslab_preload_limit = ztest_random(20) + 1; + ztest_spa = spa; + ++ VERIFY0(vdev_raidz_impl_set("cycle")); ++ + dmu_objset_stats_t dds; + VERIFY0(ztest_dmu_objset_own(ztest_opts.zo_pool, + DMU_OST_ANY, B_TRUE, B_TRUE, FTAG, &os)); +diff --git a/config/kernel-fpu.m4 b/config/kernel-fpu.m4 +index ebb02fb09..0e622e859 100644 +--- a/config/kernel-fpu.m4 ++++ b/config/kernel-fpu.m4 +@@ -2,8 +2,15 @@ dnl # + dnl # Handle differences in kernel FPU code. + dnl # + dnl # Kernel +-dnl # 5.0: All kernel fpu functions are GPL only, so we can't use them. +-dnl # (nothing defined) ++dnl # 5.2: The fpu->initialized flag was replaced by TIF_NEED_FPU_LOAD. ++dnl # HAVE_KERNEL_TIF_NEED_FPU_LOAD ++dnl # ++dnl # 5.0: As an optimization SIMD operations performed by kernel ++dnl # threads can skip saving and restoring their FPU context. ++dnl # Wrappers have been introduced to determine the running ++dnl # context and use either the SIMD or generic implementation. ++dnl # This change was made to the 4.19.38 and 4.14.120 LTS kernels. ++dnl # HAVE_KERNEL_FPU_INITIALIZED + dnl # + dnl # 4.2: Use __kernel_fpu_{begin,end}() + dnl # HAVE_UNDERSCORE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU +@@ -59,10 +66,39 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [ + __kernel_fpu_end(); + ], [__kernel_fpu_begin], [arch/x86/kernel/fpu/core.c arch/x86/kernel/i387.c], [ + AC_MSG_RESULT(__kernel_fpu_*) +- AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, [kernel has __kernel_fpu_* functions]) +- AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, [kernel exports FPU functions]) ++ AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, ++ [kernel has __kernel_fpu_* functions]) ++ AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, ++ [kernel exports FPU functions]) + ],[ +- AC_MSG_RESULT(not exported) ++ ZFS_LINUX_TRY_COMPILE([ ++ #include ++ #include ++ ],[ ++ struct fpu *fpu = ¤t->thread.fpu; ++ if (fpu->initialized) { return (0); }; ++ ],[ ++ AC_MSG_RESULT(fpu.initialized) ++ AC_DEFINE(HAVE_KERNEL_FPU_INITIALIZED, 1, ++ [kernel fpu.initialized exists]) ++ ],[ ++ ZFS_LINUX_TRY_COMPILE([ ++ #include ++ #include ++ ++ #if !defined(TIF_NEED_FPU_LOAD) ++ #error "TIF_NEED_FPU_LOAD undefined" ++ #endif ++ ],[ ++ ],[ ++ AC_MSG_RESULT(TIF_NEED_FPU_LOAD) ++ AC_DEFINE( ++ HAVE_KERNEL_TIF_NEED_FPU_LOAD, 1, ++ [kernel TIF_NEED_FPU_LOAD exists]) ++ ],[ ++ AC_MSG_RESULT(unavailable) ++ ]) ++ ]) + ]) + ]) + ]) diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am index efb49520e..2455759e8 100644 --- a/include/linux/Makefile.am @@ -155,10 +242,10 @@ index 000000000..d2b60996a +#endif +#endif /* _SIMD_H */ diff --git a/include/linux/simd_aarch64.h b/include/linux/simd_aarch64.h -index 155ef6205..1cfcd01e4 100644 +index 56153a160..b45d31c48 100644 --- a/include/linux/simd_aarch64.h +++ b/include/linux/simd_aarch64.h -@@ -41,20 +41,18 @@ +@@ -43,20 +43,18 @@ #if defined(_KERNEL) #include @@ -188,10 +275,10 @@ index 155ef6205..1cfcd01e4 100644 #endif /* __aarch64__ */ diff --git a/include/linux/simd_x86.h b/include/linux/simd_x86.h -index 12cd74677..2d7a1c3a5 100644 +index 0489bfaa3..641f43955 100644 --- a/include/linux/simd_x86.h +++ b/include/linux/simd_x86.h -@@ -90,33 +90,135 @@ +@@ -92,33 +92,135 @@ #include #endif @@ -342,7 +429,7 @@ index 12cd74677..2d7a1c3a5 100644 #endif /* defined(_KERNEL) */ /* -@@ -298,7 +400,7 @@ __simd_state_enabled(const uint64_t state) +@@ -300,7 +402,7 @@ __simd_state_enabled(const uint64_t state) uint64_t xcr0; #if defined(_KERNEL) @@ -351,7 +438,7 @@ index 12cd74677..2d7a1c3a5 100644 has_osxsave = !!boot_cpu_has(X86_FEATURE_OSXSAVE); #else has_osxsave = B_FALSE; -@@ -328,11 +430,7 @@ static inline boolean_t +@@ -330,11 +432,7 @@ static inline boolean_t zfs_sse_available(void) { #if defined(_KERNEL) @@ -363,7 +450,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_sse()); #endif -@@ -345,11 +443,7 @@ static inline boolean_t +@@ -347,11 +445,7 @@ static inline boolean_t zfs_sse2_available(void) { #if defined(_KERNEL) @@ -375,7 +462,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_sse2()); #endif -@@ -362,11 +456,7 @@ static inline boolean_t +@@ -364,11 +458,7 @@ static inline boolean_t zfs_sse3_available(void) { #if defined(_KERNEL) @@ -387,7 +474,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_sse3()); #endif -@@ -379,11 +469,7 @@ static inline boolean_t +@@ -381,11 +471,7 @@ static inline boolean_t zfs_ssse3_available(void) { #if defined(_KERNEL) @@ -399,7 +486,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_ssse3()); #endif -@@ -396,11 +482,7 @@ static inline boolean_t +@@ -398,11 +484,7 @@ static inline boolean_t zfs_sse4_1_available(void) { #if defined(_KERNEL) @@ -411,7 +498,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_sse4_1()); #endif -@@ -413,11 +495,7 @@ static inline boolean_t +@@ -415,11 +497,7 @@ static inline boolean_t zfs_sse4_2_available(void) { #if defined(_KERNEL) @@ -423,7 +510,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) return (__cpuid_has_sse4_2()); #endif -@@ -431,11 +509,7 @@ zfs_avx_available(void) +@@ -433,11 +511,7 @@ zfs_avx_available(void) { boolean_t has_avx; #if defined(_KERNEL) @@ -435,7 +522,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) has_avx = __cpuid_has_avx(); #endif -@@ -451,11 +525,7 @@ zfs_avx2_available(void) +@@ -453,11 +527,7 @@ zfs_avx2_available(void) { boolean_t has_avx2; #if defined(_KERNEL) @@ -447,7 +534,7 @@ index 12cd74677..2d7a1c3a5 100644 #elif !defined(_KERNEL) has_avx2 = __cpuid_has_avx2(); #endif -@@ -470,7 +540,7 @@ static inline boolean_t +@@ -472,7 +542,7 @@ static inline boolean_t zfs_bmi1_available(void) { #if defined(_KERNEL) @@ -456,7 +543,7 @@ index 12cd74677..2d7a1c3a5 100644 return (!!boot_cpu_has(X86_FEATURE_BMI1)); #else return (B_FALSE); -@@ -487,7 +557,7 @@ static inline boolean_t +@@ -489,7 +559,7 @@ static inline boolean_t zfs_bmi2_available(void) { #if defined(_KERNEL) @@ -465,7 +552,7 @@ index 12cd74677..2d7a1c3a5 100644 return (!!boot_cpu_has(X86_FEATURE_BMI2)); #else return (B_FALSE); -@@ -504,7 +574,7 @@ static inline boolean_t +@@ -506,7 +576,7 @@ static inline boolean_t zfs_aes_available(void) { #if defined(_KERNEL) @@ -474,7 +561,7 @@ index 12cd74677..2d7a1c3a5 100644 return (!!boot_cpu_has(X86_FEATURE_AES)); #else return (B_FALSE); -@@ -521,7 +591,7 @@ static inline boolean_t +@@ -523,7 +593,7 @@ static inline boolean_t zfs_pclmulqdq_available(void) { #if defined(_KERNEL) @@ -483,7 +570,7 @@ index 12cd74677..2d7a1c3a5 100644 return (!!boot_cpu_has(X86_FEATURE_PCLMULQDQ)); #else return (B_FALSE); -@@ -555,7 +625,7 @@ zfs_avx512f_available(void) +@@ -557,7 +627,7 @@ zfs_avx512f_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -492,7 +579,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = !!boot_cpu_has(X86_FEATURE_AVX512F); #else has_avx512 = B_FALSE; -@@ -574,7 +644,7 @@ zfs_avx512cd_available(void) +@@ -576,7 +646,7 @@ zfs_avx512cd_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -501,7 +588,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512CD); #else -@@ -594,7 +664,7 @@ zfs_avx512er_available(void) +@@ -596,7 +666,7 @@ zfs_avx512er_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -510,7 +597,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512ER); #else -@@ -614,7 +684,7 @@ zfs_avx512pf_available(void) +@@ -616,7 +686,7 @@ zfs_avx512pf_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -519,7 +606,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512PF); #else -@@ -634,7 +704,7 @@ zfs_avx512bw_available(void) +@@ -636,7 +706,7 @@ zfs_avx512bw_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -528,7 +615,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512BW); #else -@@ -654,7 +724,7 @@ zfs_avx512dq_available(void) +@@ -656,7 +726,7 @@ zfs_avx512dq_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -537,7 +624,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512DQ); #else -@@ -674,7 +744,7 @@ zfs_avx512vl_available(void) +@@ -676,7 +746,7 @@ zfs_avx512vl_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -546,7 +633,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512VL); #else -@@ -694,7 +764,7 @@ zfs_avx512ifma_available(void) +@@ -696,7 +766,7 @@ zfs_avx512ifma_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -555,7 +642,7 @@ index 12cd74677..2d7a1c3a5 100644 has_avx512 = boot_cpu_has(X86_FEATURE_AVX512F) && boot_cpu_has(X86_FEATURE_AVX512IFMA); #else -@@ -714,7 +784,7 @@ zfs_avx512vbmi_available(void) +@@ -716,7 +786,7 @@ zfs_avx512vbmi_available(void) boolean_t has_avx512 = B_FALSE; #if defined(_KERNEL) @@ -590,69 +677,8 @@ index 0799ed19d..4969d110b 100644 raidz_col_t rm_col[1]; /* Flexible array of I/O columns */ } raidz_map_t; -diff --git a/module/icp/include/aes/aes_impl.h b/module/icp/include/aes/aes_impl.h -index 95cfddf9e..9fd9c1bd1 100644 ---- a/module/icp/include/aes/aes_impl.h -+++ b/module/icp/include/aes/aes_impl.h -@@ -198,12 +198,12 @@ extern const aes_impl_ops_t aes_aesni_impl; - /* - * Initializes fastest implementation - */ --void aes_impl_init(void); -+void aes_impl_init(void *arg); - - /* -- * Get selected aes implementation -+ * Returns optimal allowed AES implementation - */ --struct aes_impl_ops *aes_impl_get_ops(void); -+const struct aes_impl_ops *aes_impl_get_ops(void); - - #ifdef __cplusplus - } -diff --git a/module/icp/include/modes/gcm_impl.h b/module/icp/include/modes/gcm_impl.h -index cbb904c05..138090487 100644 ---- a/module/icp/include/modes/gcm_impl.h -+++ b/module/icp/include/modes/gcm_impl.h -@@ -61,12 +61,12 @@ extern const gcm_impl_ops_t gcm_pclmulqdq_impl; - /* - * Initializes fastest implementation - */ --void gcm_impl_init(void); -+void gcm_impl_init(void *arg); - - /* -- * Get selected aes implementation -+ * Returns optimal allowed GCM implementation - */ --struct gcm_impl_ops *gcm_impl_get_ops(void); -+const struct gcm_impl_ops *gcm_impl_get_ops(void); - - #ifdef __cplusplus - } -diff --git a/cmd/ztest/ztest.c b/cmd/ztest/ztest.c -index 9c2cf9501..815462443 100644 ---- a/cmd/ztest/ztest.c -+++ b/cmd/ztest/ztest.c -@@ -107,6 +107,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -7094,6 +7095,8 @@ ztest_run(ztest_shared_t *zs) - metaslab_preload_limit = ztest_random(20) + 1; - ztest_spa = spa; - -+ VERIFY0(vdev_raidz_impl_set("cycle")); -+ - dmu_objset_stats_t dds; - VERIFY0(ztest_dmu_objset_own(ztest_opts.zo_pool, - DMU_OST_ANY, B_TRUE, B_TRUE, FTAG, &os)); diff --git a/module/icp/algs/aes/aes_impl.c b/module/icp/algs/aes/aes_impl.c -index e15050635..457b9e45c 100644 +index 36e0686a5..0f11f9999 100644 --- a/module/icp/algs/aes/aes_impl.c +++ b/module/icp/algs/aes/aes_impl.c @@ -27,6 +27,7 @@ @@ -750,7 +776,7 @@ index 97f7c3a47..222c176aa 100644 const aes_impl_ops_t aes_aesni_impl = { diff --git a/module/icp/algs/modes/gcm.c b/module/icp/algs/modes/gcm.c -index 13bceef0f..f6f8434de 100644 +index 0afd957f0..423b70e2c 100644 --- a/module/icp/algs/modes/gcm.c +++ b/module/icp/algs/modes/gcm.c @@ -29,6 +29,7 @@ @@ -875,7 +901,7 @@ index 13bceef0f..f6f8434de 100644 + * hardware accelerated version is the fastest. + */ #if defined(__x86_64) && defined(HAVE_PCLMULQDQ) - if (gcm_pclmulqdq_impl.is_supported()) + if (gcm_pclmulqdq_impl.is_supported()) { memcpy(&gcm_fastest_impl, &gcm_pclmulqdq_impl, diff --git a/module/icp/algs/modes/gcm_pclmulqdq.c b/module/icp/algs/modes/gcm_pclmulqdq.c index be00ba37b..8a43ba33a 100644 @@ -890,6 +916,46 @@ index be00ba37b..8a43ba33a 100644 } const gcm_impl_ops_t gcm_pclmulqdq_impl = { +diff --git a/module/icp/include/aes/aes_impl.h b/module/icp/include/aes/aes_impl.h +index 3a3de91cf..329e32a8e 100644 +--- a/module/icp/include/aes/aes_impl.h ++++ b/module/icp/include/aes/aes_impl.h +@@ -198,12 +198,12 @@ extern const aes_impl_ops_t aes_aesni_impl; + /* + * Initializes fastest implementation + */ +-void aes_impl_init(void); ++void aes_impl_init(void *arg); + + /* +- * Get selected aes implementation ++ * Returns optimal allowed AES implementation + */ +-struct aes_impl_ops *aes_impl_get_ops(void); ++const struct aes_impl_ops *aes_impl_get_ops(void); + + #ifdef __cplusplus + } +diff --git a/module/icp/include/modes/gcm_impl.h b/module/icp/include/modes/gcm_impl.h +index b78cc8aab..dff372ef8 100644 +--- a/module/icp/include/modes/gcm_impl.h ++++ b/module/icp/include/modes/gcm_impl.h +@@ -61,12 +61,12 @@ extern const gcm_impl_ops_t gcm_pclmulqdq_impl; + /* + * Initializes fastest implementation + */ +-void gcm_impl_init(void); ++void gcm_impl_init(void *arg); + + /* +- * Get selected aes implementation ++ * Returns optimal allowed GCM implementation + */ +-struct gcm_impl_ops *gcm_impl_get_ops(void); ++const struct gcm_impl_ops *gcm_impl_get_ops(void); + + #ifdef __cplusplus + } diff --git a/module/icp/io/aes.c b/module/icp/io/aes.c index 53b193693..51538bc60 100644 --- a/module/icp/io/aes.c @@ -934,10 +1000,10 @@ index 53b193693..51538bc60 100644 if ((ret = mod_install(&modlinkage)) != 0) return (ret); diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c -index 7684257be..de0e45190 100644 +index a39f94e4c..69d591ff7 100644 --- a/module/spl/spl-taskq.c +++ b/module/spl/spl-taskq.c -@@ -27,6 +27,7 @@ +@@ -28,6 +28,7 @@ #include #include #include @@ -945,7 +1011,7 @@ index 7684257be..de0e45190 100644 int spl_taskq_thread_bind = 0; module_param(spl_taskq_thread_bind, int, 0644); -@@ -869,6 +870,7 @@ taskq_thread(void *args) +@@ -853,6 +854,7 @@ taskq_thread(void *args) sigfillset(&blocked); sigprocmask(SIG_BLOCK, &blocked, NULL); flush_signals(current); @@ -954,7 +1020,7 @@ index 7684257be..de0e45190 100644 tsd_set(taskq_tsd, tq); spin_lock_irqsave_nested(&tq->tq_lock, flags, tq->tq_lock_class); diff --git a/module/spl/spl-thread.c b/module/spl/spl-thread.c -index d441ad65f..c4977bcf2 100644 +index 0352a31ea..07e3a1bff 100644 --- a/module/spl/spl-thread.c +++ b/module/spl/spl-thread.c @@ -27,6 +27,7 @@ @@ -974,7 +1040,7 @@ index d441ad65f..c4977bcf2 100644 kmem_free(tp, sizeof (thread_priv_t)); diff --git a/module/zcommon/zfs_fletcher.c b/module/zcommon/zfs_fletcher.c -index 5a991ba60..b75d8ab00 100644 +index f712ce40c..9187a7c1e 100644 --- a/module/zcommon/zfs_fletcher.c +++ b/module/zcommon/zfs_fletcher.c @@ -140,6 +140,7 @@ @@ -1054,7 +1120,7 @@ index 5a991ba60..b75d8ab00 100644 ops = fletcher_4_supp_impls[impl]; break; } -@@ -658,6 +661,7 @@ fletcher_4_kstat_addr(kstat_t *ksp, loff_t n) +@@ -659,6 +662,7 @@ fletcher_4_kstat_addr(kstat_t *ksp, loff_t n) typedef void fletcher_checksum_func_t(const void *, uint64_t, const void *, zio_cksum_t *); @@ -1221,7 +1287,7 @@ index a0b42e5f5..e6389d6e5 100644 const fletcher_4_ops_t fletcher_4_ssse3_ops = { diff --git a/module/zfs/vdev_raidz_math.c b/module/zfs/vdev_raidz_math.c -index e6112bc02..e7a39015c 100644 +index 3ef67768f..ef514e9e1 100644 --- a/module/zfs/vdev_raidz_math.c +++ b/module/zfs/vdev_raidz_math.c @@ -27,9 +27,9 @@ @@ -1348,7 +1414,7 @@ index e6112bc02..e7a39015c 100644 + raidz_map_t *bench_rm = NULL; + uint64_t bench_parity; - /* Fake an zio and run the benchmark on a warmed up buffer */ + /* Fake a zio and run the benchmark on a warmed up buffer */ bench_zio = kmem_zalloc(sizeof (zio_t), KM_SLEEP); @@ -480,7 +476,7 @@ vdev_raidz_math_init(void) memset(abd_to_buf(bench_zio->io_abd), 0xAA, BENCH_ZIO_SIZE); @@ -1548,68 +1614,3 @@ index 047a48d54..62247cf8e 100644 } const raidz_impl_ops_t vdev_raidz_ssse3_impl = { -diff --git a/config/kernel-fpu.m4 b/config/kernel-fpu.m4 -index 5fff79a74..31bf35f83 100644 ---- a/config/kernel-fpu.m4 -+++ b/config/kernel-fpu.m4 -@@ -2,8 +2,15 @@ dnl # - dnl # Handle differences in kernel FPU code. - dnl # - dnl # Kernel --dnl # 5.0: All kernel fpu functions are GPL only, so we can't use them. --dnl # (nothing defined) -+dnl # 5.2: The fpu->initialized flag was replaced by TIF_NEED_FPU_LOAD. -+dnl # HAVE_KERNEL_TIF_NEED_FPU_LOAD -+dnl # -+dnl # 5.0: As an optimization SIMD operations performed by kernel -+dnl # threads can skip saving and restoring their FPU context. -+dnl # Wrappers have been introduced to determine the running -+dnl # context and use either the SIMD or generic implementation. -+dnl # This change was made to the 4.19.38 and 4.14.120 LTS kernels. -+dnl # HAVE_KERNEL_FPU_INITIALIZED - dnl # - dnl # 4.2: Use __kernel_fpu_{begin,end}() - dnl # HAVE_UNDERSCORE_KERNEL_FPU & KERNEL_EXPORTS_X86_FPU -@@ -56,10 +63,39 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [ - __kernel_fpu_end(); - ], [__kernel_fpu_begin], [arch/x86/kernel/fpu/core.c arch/x86/kernel/i387.c], [ - AC_MSG_RESULT(__kernel_fpu_*) -- AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, [kernel has __kernel_fpu_* functions]) -- AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, [kernel exports FPU functions]) -+ AC_DEFINE(HAVE_UNDERSCORE_KERNEL_FPU, 1, -+ [kernel has __kernel_fpu_* functions]) -+ AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, -+ [kernel exports FPU functions]) - ],[ -- AC_MSG_RESULT(not exported) -+ ZFS_LINUX_TRY_COMPILE([ -+ #include -+ #include -+ ],[ -+ struct fpu *fpu = ¤t->thread.fpu; -+ if (fpu->initialized) { return (0); }; -+ ],[ -+ AC_MSG_RESULT(fpu.initialized) -+ AC_DEFINE(HAVE_KERNEL_FPU_INITIALIZED, 1, -+ [kernel fpu.initialized exists]) -+ ],[ -+ ZFS_LINUX_TRY_COMPILE([ -+ #include -+ #include -+ -+ #if !defined(TIF_NEED_FPU_LOAD) -+ #error "TIF_NEED_FPU_LOAD undefined" -+ #endif -+ ],[ -+ ],[ -+ AC_MSG_RESULT(TIF_NEED_FPU_LOAD) -+ AC_DEFINE( -+ HAVE_KERNEL_TIF_NEED_FPU_LOAD, 1, -+ [kernel TIF_NEED_FPU_LOAD exists]) -+ ],[ -+ AC_MSG_RESULT(unavailable) -+ ]) -+ ]) - ]) - ]) - ]) diff --git a/debian/patches/0009-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch b/debian/patches/0007-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch similarity index 93% rename from debian/patches/0009-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch rename to debian/patches/0007-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch index c8c8267..c4b2d2b 100644 --- a/debian/patches/0009-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch +++ b/debian/patches/0007-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch @@ -18,15 +18,16 @@ Closes #9041 Closes #9049 (cherry picked from commit 095b5412b31c07cad5cec74a4eb5ace011c92b27) Signed-off-by: Fabian Grünbichler +Signed-off-by: Thomas Lamprecht --- include/linux/simd_x86.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/linux/simd_x86.h b/include/linux/simd_x86.h -index 2d7a1c3a5..5f243e0cc 100644 +index 641f43955..edd456098 100644 --- a/include/linux/simd_x86.h +++ b/include/linux/simd_x86.h -@@ -82,6 +82,15 @@ +@@ -84,6 +84,15 @@ #if defined(_KERNEL) diff --git a/debian/patches/0007-Fix-race-in-parallel-mount-s-thread-dispatching-algo.patch b/debian/patches/0007-Fix-race-in-parallel-mount-s-thread-dispatching-algo.patch deleted file mode 100644 index 571d62d..0000000 --- a/debian/patches/0007-Fix-race-in-parallel-mount-s-thread-dispatching-algo.patch +++ /dev/null @@ -1,244 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Tomohiro Kusumi -Date: Wed, 10 Jul 2019 01:31:46 +0900 -Subject: [PATCH] Fix race in parallel mount's thread dispatching algorithm -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Strategy of parallel mount is as follows. - -1) Initial thread dispatching is to select sets of mount points that - don't have dependencies on other sets, hence threads can/should run - lock-less and shouldn't race with other threads for other sets. Each - thread dispatched corresponds to top level directory which may or may - not have datasets to be mounted on sub directories. - -2) Subsequent recursive thread dispatching for each thread from 1) - is to mount datasets for each set of mount points. The mount points - within each set have dependencies (i.e. child directories), so child - directories are processed only after parent directory completes. - -The problem is that the initial thread dispatching in -zfs_foreach_mountpoint() can be multi-threaded when it needs to be -single-threaded, and this puts threads under race condition. This race -appeared as mount/unmount issues on ZoL for ZoL having different -timing regarding mount(2) execution due to fork(2)/exec(2) of mount(8). -`zfs unmount -a` which expects proper mount order can't unmount if the -mounts were reordered by the race condition. - -There are currently two known patterns of input list `handles` in -`zfs_foreach_mountpoint(..,handles,..)` which cause the race condition. - -1) #8833 case where input is `/a /a /a/b` after sorting. - The problem is that libzfs_path_contains() can't correctly handle an - input list with two same top level directories. - There is a race between two POSIX threads A and B, - * ThreadA for "/a" for test1 and "/a/b" - * ThreadB for "/a" for test0/a - and in case of #8833, ThreadA won the race. Two threads were created - because "/a" wasn't considered as `"/a" contains "/a"`. - -2) #8450 case where input is `/ /var/data /var/data/test` after sorting. - The problem is that libzfs_path_contains() can't correctly handle an - input list containing "/". - There is a race between two POSIX threads A and B, - * ThreadA for "/" and "/var/data/test" - * ThreadB for "/var/data" - and in case of #8450, ThreadA won the race. Two threads were created - because "/var/data" wasn't considered as `"/" contains "/var/data"`. - In other words, if there is (at least one) "/" in the input list, - the initial thread dispatching must be single-threaded since every - directory is a child of "/", meaning they all directly or indirectly - depend on "/". - -In both cases, the first non_descendant_idx() call fails to correctly -determine "path1-contains-path2", and as a result the initial thread -dispatching creates another thread when it needs to be single-threaded. -Fix a conditional in libzfs_path_contains() to consider above two. - -Reviewed-by: Brian Behlendorf -Reviewed by: Sebastien Roy -Signed-off-by: Tomohiro Kusumi -Closes #8450 -Closes #8833 -Closes #8878 -(cherry picked from commit ab5036df1ccbe1b18c1ce6160b5829e8039d94ce) -Signed-off-by: Fabian Grünbichler ---- - .../functional/cli_root/zfs_mount/Makefile.am | 1 + - lib/libzfs/libzfs_mount.c | 6 +- - tests/runfiles/linux.run | 3 +- - .../cli_root/zfs_mount/zfs_mount_test_race.sh | 116 ++++++++++++++++++ - 4 files changed, 123 insertions(+), 3 deletions(-) - create mode 100755 tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_test_race.sh - -diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_mount/Makefile.am b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/Makefile.am -index b2de98934..c208a1c37 100644 ---- a/tests/zfs-tests/tests/functional/cli_root/zfs_mount/Makefile.am -+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/Makefile.am -@@ -19,6 +19,7 @@ dist_pkgdata_SCRIPTS = \ - zfs_mount_all_mountpoints.ksh \ - zfs_mount_encrypted.ksh \ - zfs_mount_remount.ksh \ -+ zfs_mount_test_race.sh \ - zfs_multi_mount.ksh - - dist_pkgdata_DATA = \ -diff --git a/lib/libzfs/libzfs_mount.c b/lib/libzfs/libzfs_mount.c -index 649c232aa..d62801cfd 100644 ---- a/lib/libzfs/libzfs_mount.c -+++ b/lib/libzfs/libzfs_mount.c -@@ -1302,12 +1302,14 @@ mountpoint_cmp(const void *arga, const void *argb) - } - - /* -- * Return true if path2 is a child of path1. -+ * Return true if path2 is a child of path1 or path2 equals path1 or -+ * path1 is "/" (path2 is always a child of "/"). - */ - static boolean_t - libzfs_path_contains(const char *path1, const char *path2) - { -- return (strstr(path2, path1) == path2 && path2[strlen(path1)] == '/'); -+ return (strcmp(path1, path2) == 0 || strcmp(path1, "/") == 0 || -+ (strstr(path2, path1) == path2 && path2[strlen(path1)] == '/')); - } - - /* -diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run -index 22fc26212..4d673cc95 100644 ---- a/tests/runfiles/linux.run -+++ b/tests/runfiles/linux.run -@@ -182,7 +182,8 @@ tests = ['zfs_mount_001_pos', 'zfs_mount_002_pos', 'zfs_mount_003_pos', - 'zfs_mount_007_pos', 'zfs_mount_008_pos', 'zfs_mount_009_neg', - 'zfs_mount_010_neg', 'zfs_mount_011_neg', 'zfs_mount_012_neg', - 'zfs_mount_all_001_pos', 'zfs_mount_encrypted', 'zfs_mount_remount', -- 'zfs_multi_mount', 'zfs_mount_all_fail', 'zfs_mount_all_mountpoints'] -+ 'zfs_multi_mount', 'zfs_mount_all_fail', 'zfs_mount_all_mountpoints', -+ 'zfs_mount_test_race'] - tags = ['functional', 'cli_root', 'zfs_mount'] - - [tests/functional/cli_root/zfs_program] -diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_test_race.sh b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_test_race.sh -new file mode 100755 -index 000000000..404770b27 ---- /dev/null -+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_test_race.sh -@@ -0,0 +1,116 @@ -+#!/bin/ksh -+ -+# -+# This file and its contents are supplied under the terms of the -+# Common Development and Distribution License ("CDDL"), version 1.0. -+# You may only use this file in accordance with the terms of version -+# 1.0 of the CDDL. -+# -+# A full copy of the text of the CDDL should have accompanied this -+# source. A copy of the CDDL is also available via the Internet at -+# http://www.illumos.org/license/CDDL. -+# -+ -+# -+# Copyright (c) 2019 by Tomohiro Kusumi. All rights reserved. -+# -+ -+. $STF_SUITE/include/libtest.shlib -+. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.cfg -+ -+# -+# DESCRIPTION: -+# Verify parallel mount ordering is consistent. -+# -+# There was a bug in initial thread dispatching algorithm which put threads -+# under race condition which resulted in undefined mount order. The purpose -+# of this test is to verify `zfs unmount -a` succeeds (not `zfs mount -a` -+# succeeds, it always does) after `zfs mount -a`, which could fail if threads -+# race. See github.com/zfsonlinux/zfs/issues/{8450,8833,8878} for details. -+# -+# STRATEGY: -+# 1. Create pools and filesystems. -+# 2. Set same mount point for >1 datasets. -+# 3. Unmount all datasets. -+# 4. Mount all datasets. -+# 5. Unmount all datasets (verify this succeeds). -+# -+ -+verify_runnable "both" -+ -+TMPDIR=${TMPDIR:-$TEST_BASE_DIR} -+MNTPT=$TMPDIR/zfs_mount_test_race_mntpt -+DISK1="$TMPDIR/zfs_mount_test_race_disk1" -+DISK2="$TMPDIR/zfs_mount_test_race_disk2" -+ -+TESTPOOL1=zfs_mount_test_race_tp1 -+TESTPOOL2=zfs_mount_test_race_tp2 -+ -+export __ZFS_POOL_RESTRICT="$TESTPOOL1 $TESTPOOL2" -+log_must zfs $unmountall -+unset __ZFS_POOL_RESTRICT -+ -+function cleanup -+{ -+ zpool destroy $TESTPOOL1 -+ zpool destroy $TESTPOOL2 -+ rm -rf $MNTPT -+ rm -rf /$TESTPOOL1 -+ rm -rf /$TESTPOOL2 -+ rm -f $DISK1 -+ rm -f $DISK2 -+ export __ZFS_POOL_RESTRICT="$TESTPOOL1 $TESTPOOL2" -+ log_must zfs $mountall -+ unset __ZFS_POOL_RESTRICT -+} -+log_onexit cleanup -+ -+log_note "Verify parallel mount ordering is consistent" -+ -+log_must truncate -s $MINVDEVSIZE $DISK1 -+log_must truncate -s $MINVDEVSIZE $DISK2 -+ -+log_must zpool create -f $TESTPOOL1 $DISK1 -+log_must zpool create -f $TESTPOOL2 $DISK2 -+ -+log_must zfs create $TESTPOOL1/$TESTFS1 -+log_must zfs create $TESTPOOL2/$TESTFS2 -+ -+log_must zfs set mountpoint=none $TESTPOOL1 -+log_must zfs set mountpoint=$MNTPT $TESTPOOL1/$TESTFS1 -+ -+# Note that unmount can fail (due to race condition on `zfs mount -a`) with or -+# without `canmount=off`. The race has nothing to do with canmount property, -+# but turn it off for convenience of mount layout used in this test case. -+log_must zfs set canmount=off $TESTPOOL2 -+log_must zfs set mountpoint=$MNTPT $TESTPOOL2 -+ -+# At this point, layout of datasets in two pools will look like below. -+# Previously, on next `zfs mount -a`, pthreads assigned to TESTFS1 and TESTFS2 -+# could race, and TESTFS2 usually (actually always) won in ZoL. Note that the -+# problem is how two or more threads could initially be assigned to the same -+# top level directory, not this specific layout. This layout is just an example -+# that can reproduce race, and is also the layout reported in #8833. -+# -+# NAME MOUNTED MOUNTPOINT -+# ---------------------------------------------- -+# /$TESTPOOL1 no none -+# /$TESTPOOL1/$TESTFS1 yes $MNTPT -+# /$TESTPOOL2 no $MNTPT -+# /$TESTPOOL2/$TESTFS2 yes $MNTPT/$TESTFS2 -+ -+# Apparently two datasets must be mounted. -+log_must ismounted $TESTPOOL1/$TESTFS1 -+log_must ismounted $TESTPOOL2/$TESTFS2 -+# This unmount always succeeds, because potential race hasn't happened yet. -+log_must zfs unmount -a -+# This mount always succeeds, whether threads are under race condition or not. -+log_must zfs mount -a -+ -+# Verify datasets are mounted (TESTFS2 fails if the race broke mount order). -+log_must ismounted $TESTPOOL1/$TESTFS1 -+log_must ismounted $TESTPOOL2/$TESTFS2 -+# Verify unmount succeeds (fails if the race broke mount order). -+log_must zfs unmount -a -+ -+log_pass "Verify parallel mount ordering is consistent passed" diff --git a/debian/patches/0010-SIMD-FPU-register-save-restore-is-also-required-on-5.patch b/debian/patches/0008-SIMD-FPU-register-save-restore-is-also-required-on-5.patch similarity index 91% rename from debian/patches/0010-SIMD-FPU-register-save-restore-is-also-required-on-5.patch rename to debian/patches/0008-SIMD-FPU-register-save-restore-is-also-required-on-5.patch index 87c8af1..db0c8a3 100644 --- a/debian/patches/0010-SIMD-FPU-register-save-restore-is-also-required-on-5.patch +++ b/debian/patches/0008-SIMD-FPU-register-save-restore-is-also-required-on-5.patch @@ -14,10 +14,10 @@ Signed-off-by: Thomas Lamprecht 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/include/linux/simd_x86.h b/include/linux/simd_x86.h -index 5f243e0cc..aac63d964 100644 +index edd456098..13aa77345 100644 --- a/include/linux/simd_x86.h +++ b/include/linux/simd_x86.h -@@ -179,7 +179,6 @@ kfpu_begin(void) +@@ -181,7 +181,6 @@ kfpu_begin(void) preempt_disable(); local_irq_disable(); @@ -25,7 +25,7 @@ index 5f243e0cc..aac63d964 100644 /* * The current FPU registers need to be preserved by kfpu_begin() * and restored by kfpu_end(). This is required because we can -@@ -188,20 +187,13 @@ kfpu_begin(void) +@@ -190,20 +189,13 @@ kfpu_begin(void) * context switch. */ copy_fpregs_to_fpstate(¤t->thread.fpu); @@ -47,7 +47,7 @@ index 5f243e0cc..aac63d964 100644 union fpregs_state *state = ¤t->thread.fpu.state; int error; -@@ -213,7 +205,6 @@ kfpu_end(void) +@@ -215,7 +207,6 @@ kfpu_end(void) error = copy_kernel_to_fregs_err(&state->fsave); } WARN_ON_ONCE(error); diff --git a/debian/patches/series b/debian/patches/series index c65e410..fb4276e 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,10 +1,8 @@ 0001-Check-for-META-and-DCH-consistency-in-autoconf.patch 0002-always-load-ZFS-module-on-boot.patch 0003-Fix-the-path-to-the-zed-binary-on-the-systemd-unit.patch -0004-increase-default-zcmd-allocation-to-256K.patch -0005-import-with-d-dev-disk-by-id-in-scan-service.patch -0006-Enable-zed-emails.patch -0007-Fix-race-in-parallel-mount-s-thread-dispatching-algo.patch -0008-Linux-5.0-compat-SIMD-compatibility.patch -0009-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch -0010-SIMD-FPU-register-save-restore-is-also-required-on-5.patch +0004-import-with-d-dev-disk-by-id-in-scan-service.patch +0005-Enable-zed-emails.patch +0006-Linux-5.0-compat-SIMD-compatibility.patch +0007-Fix-CONFIG_X86_DEBUG_FPU-build-failure.patch +0008-SIMD-FPU-register-save-restore-is-also-required-on-5.patch diff --git a/upstream b/upstream index 63b88f7..1222e92 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 63b88f7e223c1061c522762803b1431e7faba5b3 +Subproject commit 1222e921c9e3d8f5c693f196435be4604a1187c0