diff --git a/0002-test-mock-pass-thru-unknown-ioctls.patch b/0002-test-mock-pass-thru-unknown-ioctls.patch new file mode 100644 index 0000000..cdf8034 --- /dev/null +++ b/0002-test-mock-pass-thru-unknown-ioctls.patch @@ -0,0 +1,81 @@ +From 3ea902f4c8b5a1896bb4087e95c9a90614ef2d9b Mon Sep 17 00:00:00 2001 +From: Daniel Wagner +Date: Mon, 25 Nov 2024 13:48:37 +0100 +Subject: [PATCH] test/mock: pass thru unknown ioctls + +On s390, tests which use the mock infrastructure fail, because all +unhandled ioctl are considered as fail. The tests issue kvm related +ioctls (0x7a). No need to fail or intercept them, just pass them thru to +the real ioctl. + +Signed-off-by: Daniel Wagner +--- + test/ioctl/mock.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +diff --git a/test/ioctl/mock.c b/test/ioctl/mock.c +index 1fb3ec1f9b07..14f6e71bdde0 100644 +--- a/test/ioctl/mock.c ++++ b/test/ioctl/mock.c +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + + #include "../../src/nvme/ioctl.h" + #include "util.h" +@@ -118,18 +119,20 @@ void end_mock_cmds(void) + }) + + #ifdef HAVE_GLIBC_IOCTL ++typedef int (*ioctl_func_t)(int, unsigned long, void *); + int ioctl(int fd, unsigned long request, ...) + #else ++typedef int (*ioctl_func_t)(int, int, void *); + int ioctl(int fd, int request, ...) + #endif + { ++ ioctl_func_t real_ioctl = NULL; + struct mock_cmds *mock_cmds; + bool result64; + const struct mock_cmd *mock_cmd; + va_list args; + void *cmd; + +- check(fd == mock_fd, "got fd %d, expected %d", fd, mock_fd); + switch (request) { + case NVME_IOCTL_ADMIN_CMD: + mock_cmds = &mock_admin_cmds; +@@ -148,16 +151,24 @@ int ioctl(int fd, int request, ...) + result64 = true; + break; + default: +- fail("unexpected %s %lu", __func__, (unsigned long) request); ++ real_ioctl = dlsym(RTLD_NEXT, "ioctl"); ++ if (!real_ioctl) ++ fail("Error: dlsym failed to find original ioctl\n"); + } ++ ++ va_start(args, request); ++ cmd = va_arg(args, void *); ++ va_end(args); ++ ++ if (real_ioctl) ++ return real_ioctl(fd, request, cmd); ++ ++ check(fd == mock_fd, "got fd %d, expected %d", fd, mock_fd); + check(mock_cmds->remaining_cmds, + "unexpected %s command", mock_cmds->name); + mock_cmd = mock_cmds->cmds++; + mock_cmds->remaining_cmds--; + +- va_start(args, request); +- cmd = va_arg(args, void *); +- va_end(args); + if (result64) { + execute_ioctl((struct nvme_passthru_cmd64 *)cmd, mock_cmd); + } else { +-- +2.47.0 + diff --git a/libnvme.changes b/libnvme.changes index d73a53b..ffe8ed9 100644 --- a/libnvme.changes +++ b/libnvme.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Nov 25 13:15:00 UTC 2024 - Daniel Wagner + +- Fix tests on s390 + * add 0002-test-mock-pass-thru-unknown-ioctls.patch + ------------------------------------------------------------------- Thu Oct 31 13:06:35 UTC 2024 - Daniel Wagner diff --git a/libnvme.spec b/libnvme.spec index ad6c51c..61f4cae 100644 --- a/libnvme.spec +++ b/libnvme.spec @@ -28,6 +28,7 @@ License: LGPL-2.1-or-later URL: https://github.com/linux-nvme/libnvme/ Source0: libnvme-%{version}.tar.gz Patch01: 0001-linux-fix-derive_psk_digest-OpenSSL-1.1-version.patch +Patch02: 0002-test-mock-pass-thru-unknown-ioctls.patch BuildRequires: dbus-1-devel BuildRequires: gcc BuildRequires: gcc-c++