[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/28] monitor: Report errors from monitor_fdset_dup_fd_add
From: |
Fabiano Rosas |
Subject: |
[PULL 09/28] monitor: Report errors from monitor_fdset_dup_fd_add |
Date: |
Fri, 21 Jun 2024 14:54:15 -0300 |
I'm keeping the EACCES because callers expect to be able to look at
errno.
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
include/monitor/monitor.h | 2 +-
monitor/fds.c | 10 +++++++++-
stubs/fdset.c | 2 +-
util/osdep.c | 10 +---------
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
index fd9b3f538c..c3740ec616 100644
--- a/include/monitor/monitor.h
+++ b/include/monitor/monitor.h
@@ -51,7 +51,7 @@ int monitor_read_password(MonitorHMP *mon, ReadLineFunc
*readline_func,
AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
const char *opaque, Error **errp);
-int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags);
+int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags, Error **errp);
void monitor_fdset_dup_fd_remove(int dup_fd);
void monitor_register_hmp(const char *name, bool info,
diff --git a/monitor/fds.c b/monitor/fds.c
index e7619a6103..d8c6b395b0 100644
--- a/monitor/fds.c
+++ b/monitor/fds.c
@@ -409,9 +409,10 @@ AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id,
int64_t fdset_id,
return fdinfo;
}
-int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags)
+int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags, Error **errp)
{
#ifdef _WIN32
+ error_setg(errp, "Platform does not support fd passing (fdset)");
return -ENOENT;
#else
MonFdset *mon_fdset;
@@ -431,6 +432,8 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags)
QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
if (mon_fd_flags == -1) {
+ error_setg(errp, "Failed to read file status flags for fd=%d",
+ mon_fdset_fd->fd);
return -1;
}
@@ -442,11 +445,15 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags)
if (fd == -1) {
errno = EACCES;
+ error_setg(errp,
+ "Failed to find file descriptor with matching
flags=0x%x",
+ flags);
return -1;
}
dup_fd = qemu_dup_flags(fd, flags);
if (dup_fd == -1) {
+ error_setg(errp, "Failed to dup() given file descriptor fd=%d",
fd);
return -1;
}
@@ -456,6 +463,7 @@ int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags)
return dup_fd;
}
+ error_setg(errp, "Failed to find fdset /dev/fdset/%" PRId64, fdset_id);
errno = ENOENT;
return -1;
#endif
diff --git a/stubs/fdset.c b/stubs/fdset.c
index 389e368a29..2950fd91fd 100644
--- a/stubs/fdset.c
+++ b/stubs/fdset.c
@@ -3,7 +3,7 @@
#include "monitor/monitor.h"
#include "../monitor/monitor-internal.h"
-int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags)
+int monitor_fdset_dup_fd_add(int64_t fdset_id, int flags, Error **errp)
{
errno = ENOSYS;
return -1;
diff --git a/util/osdep.c b/util/osdep.c
index 756de9a745..5bbfdfac7a 100644
--- a/util/osdep.c
+++ b/util/osdep.c
@@ -310,7 +310,6 @@ qemu_open_internal(const char *name, int flags, mode_t
mode, Error **errp)
/* Attempt dup of fd from fd set */
if (strstart(name, "/dev/fdset/", &fdset_id_str)) {
int64_t fdset_id;
- int dupfd;
fdset_id = qemu_parse_fdset(fdset_id_str);
if (fdset_id == -1) {
@@ -319,14 +318,7 @@ qemu_open_internal(const char *name, int flags, mode_t
mode, Error **errp)
return -1;
}
- dupfd = monitor_fdset_dup_fd_add(fdset_id, flags);
- if (dupfd == -1) {
- error_setg_errno(errp, errno, "Could not dup FD for %s flags %x",
- name, flags);
- return -1;
- }
-
- return dupfd;
+ return monitor_fdset_dup_fd_add(fdset_id, flags, errp);
}
#endif
--
2.35.3
- [PULL 00/28] Migration patches for 2024-06-21, Fabiano Rosas, 2024/06/21
- [PULL 01/28] migration: Drop reference to QIOChannel if file seeking fails, Fabiano Rosas, 2024/06/21
- [PULL 02/28] migration: Fix file migration with fdset, Fabiano Rosas, 2024/06/21
- [PULL 03/28] tests/qtest/migration: Fix file migration offset check, Fabiano Rosas, 2024/06/21
- [PULL 05/28] monitor: Drop monitor_fdset_dup_fd_find/_remove(), Fabiano Rosas, 2024/06/21
- [PULL 04/28] tests/qtest/migration: Add a precopy file test with fdset, Fabiano Rosas, 2024/06/21
- [PULL 06/28] monitor: Introduce monitor_fdset_*free, Fabiano Rosas, 2024/06/21
- [PULL 07/28] monitor: Stop removing non-duplicated fds, Fabiano Rosas, 2024/06/21
- [PULL 08/28] monitor: Simplify fdset and fd removal, Fabiano Rosas, 2024/06/21
- [PULL 09/28] monitor: Report errors from monitor_fdset_dup_fd_add,
Fabiano Rosas <=
- [PULL 10/28] io: Stop using qemu_open_old in channel-file, Fabiano Rosas, 2024/06/21
- [PULL 11/28] migration: Add direct-io parameter, Fabiano Rosas, 2024/06/21
- [PULL 12/28] migration/multifd: Add direct-io support, Fabiano Rosas, 2024/06/21
- [PULL 13/28] tests/qtest/migration: Add tests for file migration with direct-io, Fabiano Rosas, 2024/06/21
- [PULL 14/28] monitor: fdset: Match against O_DIRECT, Fabiano Rosas, 2024/06/21
- [PULL 15/28] migration: Add documentation for fdset with multifd + file, Fabiano Rosas, 2024/06/21
- [PULL 16/28] tests/qtest/migration: Add a test for mapped-ram with passing of fds, Fabiano Rosas, 2024/06/21
- [PULL 17/28] migration/multifd: Avoid the final FLUSH in complete(), Fabiano Rosas, 2024/06/21
- [PULL 18/28] migration: Rename thread debug names, Fabiano Rosas, 2024/06/21
- [PULL 19/28] migration: Use MigrationStatus instead of int, Fabiano Rosas, 2024/06/21