diff mbox series

[1/1] package/zfs: fix uClibc support

Message ID 20240722142141.2105929-2-salvador.joseluis@gmail.com
State Changes Requested
Headers show
Series [1/1] package/zfs: fix uClibc support | expand

Commit Message

José Luis Salvador Rufo July 22, 2024, 2:21 p.m. UTC
This update addresses the issue of uClibc support by skipping ZFS tests
that require SEEK_DATA support.

This is a work-in-progress patch while we wait for an upstream fix.
Current upstream efforts can be followed here:
https://github.com/openzfs/zfs/pull/16169

Context:
- OpenZFS includes a test for a bug that occurs when copying a large
  number of PUNCHED files.
- OpenZFS has backported this test to v2.2.x.
- uClibc does not support SEEK_DATA and SEEK_HOLE.
- The ZFS test `cp_stress` can not be compiled using uClibc.

This commit fix:
- https://gitlab.com/buildroot.org/buildroot/-/jobs/7391793226

Signed-off-by: José Luis Salvador Rufo <salvador.joseluis@gmail.com>
---
 ...s-ignore-if-SEEK_DATA-is-not-defined.patch | 162 ++++++++++++++++++
 package/zfs/zfs.hash                          |   2 +
 2 files changed, 164 insertions(+)
 create mode 100644 package/zfs/0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch

Comments

Thomas Petazzoni July 22, 2024, 4:23 p.m. UTC | #1
Hello José,

On Mon, 22 Jul 2024 16:21:42 +0200
José Luis Salvador Rufo <salvador.joseluis@gmail.com> wrote:

> This update addresses the issue of uClibc support by skipping ZFS tests
> that require SEEK_DATA support.
> 
> This is a work-in-progress patch while we wait for an upstream fix.
> Current upstream efforts can be followed here:
> https://github.com/openzfs/zfs/pull/16169
> 
> Context:
> - OpenZFS includes a test for a bug that occurs when copying a large
>   number of PUNCHED files.
> - OpenZFS has backported this test to v2.2.x.
> - uClibc does not support SEEK_DATA and SEEK_HOLE.
> - The ZFS test `cp_stress` can not be compiled using uClibc.
> 
> This commit fix:
> - https://gitlab.com/buildroot.org/buildroot/-/jobs/7391793226
> 
> Signed-off-by: José Luis Salvador Rufo <salvador.joseluis@gmail.com>

Thanks for coming up with the patch! See below some comments.


> + config/user-unistd.m4                  | 24 ++++++++++++++++++++++++
> + config/user.m4                         |  1 +
> + config/zfs-build.m4                    |  1 +

Since this patch touches the m4 machinery, we need ZFS_AUTORECONF = YES
in the .mk file. Turns out it is already there... but for the wrong
reason:

# 0001-config-user-check-for-aio.h.patch
ZFS_AUTORECONF = YES

Indeed, this patch 0001-config-user-check-for-aio.h.patch is no longer
there.

Could you as part of this patch fix this up?

> diff --git a/package/zfs/zfs.hash b/package/zfs/zfs.hash
> index 9c8d4cec85..bef95063f9 100644
> --- a/package/zfs/zfs.hash
> +++ b/package/zfs/zfs.hash
> @@ -4,3 +4,5 @@ sha256  9790905f7683d41759418e1ef3432828c31116654ff040e91356ff1c21c31ec0  zfs-2.
>  # Hash for license files:
>  sha256  1ffb70c33c4f79f04e947facc5c7851f289609256aacb47fc115f700427d9520  LICENSE
>  sha256  f125a37c829705eff3e6f77a9f6c58fd71060f84ab54180b98fafdf94a2021eb  COPYRIGHT
> +
> +sha256  71e605df37abf8c48b7c103e6dec7538b5d06fc91416c77c50525d021b9b91b0  0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch

No need to push the hash of the patch in the hash file. The hash file
is to document hashes of stuff downloaded by Buildroot. Here the patch
is provided *by* Buildroot, so no hash checking is needed for it.

Could you send a v2 to address those two small comments?

Thanks a lot!

Thomas
diff mbox series

Patch

diff --git a/package/zfs/0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch b/package/zfs/0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch
new file mode 100644
index 0000000000..f47c615d10
--- /dev/null
+++ b/package/zfs/0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch
@@ -0,0 +1,162 @@ 
+From 93e7f8889072047276da11fe6a525d3f0ea16205 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Luis=20Salvador=20Rufo?=
+ <salvador.joseluis@gmail.com>
+Date: Sat, 11 May 2024 22:40:12 +0200
+Subject: [PATCH] tests/cp_files: ignore if SEEK_DATA is not defined
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Not all C libraries support SEEK_DATA (e.g., uClibc). Skip the test case
+cp_files if SEEK_DATA is not defined.
+
+Signed-off-by: José Luis Salvador Rufo <salvador.joseluis@gmail.com>
+Upstream: https://github.com/openzfs/zfs/pull/16169
+---
+ config/user-unistd.m4                  | 24 ++++++++++++++++++++++++
+ config/user.m4                         |  1 +
+ config/zfs-build.m4                    |  1 +
+ tests/test-runner/bin/zts-report.py.in |  1 +
+ tests/zfs-tests/Makefile.am            |  2 ++
+ tests/zfs-tests/cmd/Makefile.am        |  6 +++++-
+ tests/zfs-tests/tests/Makefile.am      | 14 +++++++++-----
+ 7 files changed, 43 insertions(+), 6 deletions(-)
+ create mode 100644 config/user-unistd.m4
+
+diff --git a/config/user-unistd.m4 b/config/user-unistd.m4
+new file mode 100644
+index 000000000..302bc0bde
+--- /dev/null
++++ b/config/user-unistd.m4
+@@ -0,0 +1,24 @@
++dnl #
++dnl # Check for SEEK_DATA - only used for cp_files/seekflood test case.
++dnl #
++AC_DEFUN([ZFS_AC_CONFIG_USER_UNISTD_SEEK_DATA], [
++	AC_MSG_CHECKING(whether host toolchain supports SEEK_DATA)
++
++	AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
++		#ifndef _GNU_SOURCE
++		#define _GNU_SOURCE
++		#endif
++		#include <unistd.h>
++		#if defined(SEEK_DATA)
++			int ok;
++		#else
++			error fail
++		#endif
++	]])], [
++		user_unistd_seek_data=yes
++		AC_MSG_RESULT([yes])
++	], [
++		user_unistd_seek_data=no
++		AC_MSG_RESULT([no])
++	])
++])
+diff --git a/config/user.m4 b/config/user.m4
+index 6ec27a5b2..2326a44be 100644
+--- a/config/user.m4
++++ b/config/user.m4
+@@ -23,6 +23,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
+ 	ZFS_AC_CONFIG_USER_LIBAIO
+ 	ZFS_AC_CONFIG_USER_LIBATOMIC
+ 	ZFS_AC_CONFIG_USER_LIBFETCH
++	ZFS_AC_CONFIG_USER_UNISTD_SEEK_DATA
+ 	ZFS_AC_CONFIG_USER_AIO_H
+ 	ZFS_AC_CONFIG_USER_CLOCK_GETTIME
+ 	ZFS_AC_CONFIG_USER_PAM
+diff --git a/config/zfs-build.m4 b/config/zfs-build.m4
+index bb5a85d81..578692676 100644
+--- a/config/zfs-build.m4
++++ b/config/zfs-build.m4
+@@ -294,6 +294,7 @@ AC_DEFUN([ZFS_AC_CONFIG], [
+ 	    [test "x$qatsrc" != x ])
+ 	AM_CONDITIONAL([WANT_DEVNAME2DEVID], [test "x$user_libudev" = xyes ])
+ 	AM_CONDITIONAL([WANT_MMAP_LIBAIO], [test "x$user_libaio" = xyes ])
++	AM_CONDITIONAL([WANT_UNISTD_SEEK_DATA], [test "x$user_unistd_seek_data" = xyes ])
+ 	AM_CONDITIONAL([PAM_ZFS_ENABLED], [test "x$enable_pam" = xyes])
+ ])
+ 
+diff --git a/tests/test-runner/bin/zts-report.py.in b/tests/test-runner/bin/zts-report.py.in
+index ecc50f487..3a00345ed 100755
+--- a/tests/test-runner/bin/zts-report.py.in
++++ b/tests/test-runner/bin/zts-report.py.in
+@@ -162,6 +162,7 @@ known = {
+         ['FAIL', rewind_reason],
+     'cli_user/misc/zfs_share_001_neg': ['SKIP', na_reason],
+     'cli_user/misc/zfs_unshare_001_neg': ['SKIP', na_reason],
++    'cp_files/cp_stress': ['SKIP', 16169],
+     'pool_checkpoint/checkpoint_discard_busy': ['SKIP', 12053],
+     'privilege/setup': ['SKIP', na_reason],
+     'refreserv/refreserv_004_pos': ['FAIL', known_reason],
+diff --git a/tests/zfs-tests/Makefile.am b/tests/zfs-tests/Makefile.am
+index 3dd1a6452..8ae790057 100644
+--- a/tests/zfs-tests/Makefile.am
++++ b/tests/zfs-tests/Makefile.am
+@@ -13,8 +13,10 @@ scripts_zfs_tests_functional_hkdf_PROGRAMS = %D%/tests/functional/hkdf/hkdf_test
+ %C%_tests_functional_hkdf_hkdf_test_LDADD = \
+ 	libzpool.la
+ 
++if WANT_UNISTD_SEEK_DATA
+ scripts_zfs_tests_functional_cp_filesdir = $(datadir)/$(PACKAGE)/zfs-tests/tests/functional/cp_files
+ scripts_zfs_tests_functional_cp_files_PROGRAMS = %D%/tests/functional/cp_files/seekflood
++endif
+ 
+ if BUILD_LINUX
+ scripts_zfs_tests_functional_tmpfiledir = $(datadir)/$(PACKAGE)/zfs-tests/tests/functional/tmpfile
+diff --git a/tests/zfs-tests/cmd/Makefile.am b/tests/zfs-tests/cmd/Makefile.am
+index 23848a82f..69bba3039 100644
+--- a/tests/zfs-tests/cmd/Makefile.am
++++ b/tests/zfs-tests/cmd/Makefile.am
+@@ -5,7 +5,6 @@ scripts_zfs_tests_bin_PROGRAMS  = %D%/chg_usr_exec
+ scripts_zfs_tests_bin_PROGRAMS += %D%/clonefile
+ scripts_zfs_tests_bin_PROGRAMS += %D%/clone_mmap_cached
+ scripts_zfs_tests_bin_PROGRAMS += %D%/clone_mmap_write
+-scripts_zfs_tests_bin_PROGRAMS += %D%/cp_files
+ scripts_zfs_tests_bin_PROGRAMS += %D%/ctime
+ scripts_zfs_tests_bin_PROGRAMS += %D%/dir_rd_update
+ scripts_zfs_tests_bin_PROGRAMS += %D%/dosmode_readonly_write
+@@ -16,6 +15,11 @@ scripts_zfs_tests_bin_PROGRAMS += %D%/truncate_test
+ scripts_zfs_tests_bin_PROGRAMS += %D%/zfs_diff-socket
+ 
+ 
++if WANT_UNISTD_SEEK_DATA
++scripts_zfs_tests_bin_PROGRAMS += %D%/cp_files
++endif
++
++
+ scripts_zfs_tests_bin_PROGRAMS += %D%/badsend
+ %C%_badsend_LDADD = \
+ 	libzfs_core.la \
+diff --git a/tests/zfs-tests/tests/Makefile.am b/tests/zfs-tests/tests/Makefile.am
+index cc66d762f..1e9f06a7e 100644
+--- a/tests/zfs-tests/tests/Makefile.am
++++ b/tests/zfs-tests/tests/Makefile.am
+@@ -1394,11 +1394,6 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
+ 	functional/compression/l2arc_encrypted.ksh \
+ 	functional/compression/l2arc_encrypted_no_compressed_arc.ksh \
+ 	functional/compression/setup.ksh \
+-	functional/cp_files/cleanup.ksh \
+-	functional/cp_files/cp_files_001_pos.ksh \
+-	functional/cp_files/cp_files_002_pos.ksh \
+-	functional/cp_files/cp_stress.ksh \
+-	functional/cp_files/setup.ksh \
+ 	functional/crtime/cleanup.ksh \
+ 	functional/crtime/crtime_001_pos.ksh \
+ 	functional/crtime/setup.ksh \
+@@ -2108,3 +2103,12 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
+ 	functional/idmap_mount/idmap_mount_003.ksh \
+ 	functional/idmap_mount/idmap_mount_004.ksh \
+ 	functional/idmap_mount/idmap_mount_005.ksh
++
++if WANT_UNISTD_SEEK_DATA
++nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
++	functional/cp_files/cleanup.ksh \
++	functional/cp_files/cp_files_001_pos.ksh \
++	functional/cp_files/cp_files_002_pos.ksh \
++	functional/cp_files/cp_stress.ksh \
++	functional/cp_files/setup.ksh
++endif
+-- 
+2.45.2
+
diff --git a/package/zfs/zfs.hash b/package/zfs/zfs.hash
index 9c8d4cec85..bef95063f9 100644
--- a/package/zfs/zfs.hash
+++ b/package/zfs/zfs.hash
@@ -4,3 +4,5 @@  sha256  9790905f7683d41759418e1ef3432828c31116654ff040e91356ff1c21c31ec0  zfs-2.
 # Hash for license files:
 sha256  1ffb70c33c4f79f04e947facc5c7851f289609256aacb47fc115f700427d9520  LICENSE
 sha256  f125a37c829705eff3e6f77a9f6c58fd71060f84ab54180b98fafdf94a2021eb  COPYRIGHT
+
+sha256  71e605df37abf8c48b7c103e6dec7538b5d06fc91416c77c50525d021b9b91b0  0001-tests-cp_files-ignore-if-SEEK_DATA-is-not-defined.patch