Sync from SUSE:SLFO:Main libnvme revision 8f9331a5fce6b786f18832e09922ff58

This commit is contained in:
Adrian Schröter 2024-12-04 09:21:12 +01:00
parent 5d82ad119b
commit 326d625e83
3 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,81 @@
From 3ea902f4c8b5a1896bb4087e95c9a90614ef2d9b Mon Sep 17 00:00:00 2001
From: Daniel Wagner <wagi@kernel.org>
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 <wagi@kernel.org>
---
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 <stdarg.h>
#include <string.h>
#include <sys/ioctl.h>
+#include <dlfcn.h>
#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

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Mon Nov 25 13:15:00 UTC 2024 - Daniel Wagner <daniel.wagner@suse.com>
- Fix tests on s390
* add 0002-test-mock-pass-thru-unknown-ioctls.patch
-------------------------------------------------------------------
Thu Oct 31 13:06:35 UTC 2024 - Daniel Wagner <daniel.wagner@suse.com>

View File

@ -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++