Reviewed-by: Konstantin Kostiuk On Fri, May 13, 2022 at 9:08 PM wrote: > From: Marc-André Lureau > > qemu_open_old() uses qemu_open_internal() which handles special > "/dev/fdset/" path for monitor fd sets, set CLOEXEC, and uses Error > reporting (and some O_DIRECT special error casing). > > The monitor fdset handling is unnecessary for qga, use > qemu_open_cloexec() instead. > > Signed-off-by: Marc-André Lureau > --- > qga/channel-posix.c | 14 +++++++++----- > qga/commands-posix.c | 24 ++++++++++++------------ > 2 files changed, 21 insertions(+), 17 deletions(-) > > diff --git a/qga/channel-posix.c b/qga/channel-posix.c > index 039e1ddcb2..affee485fc 100644 > --- a/qga/channel-posix.c > +++ b/qga/channel-posix.c > @@ -1,4 +1,5 @@ > #include "qemu/osdep.h" > +#include "qemu/cutils.h" > #include > #include "qapi/error.h" > #include "qemu/sockets.h" > @@ -128,11 +129,15 @@ static gboolean ga_channel_open(GAChannel *c, const > gchar *path, > switch (c->method) { > case GA_CHANNEL_VIRTIO_SERIAL: { > assert(fd < 0); > - fd = qemu_open_old(path, O_RDWR | O_NONBLOCK > + fd = qemu_open_cloexec( > + path, > #ifndef CONFIG_SOLARIS > - | O_ASYNC > + O_ASYNC | > #endif > - ); > + O_RDWR | O_NONBLOCK, > + 0, > + errp > + ); > if (fd == -1) { > error_setg_errno(errp, errno, "error opening channel"); > return false; > @@ -157,9 +162,8 @@ static gboolean ga_channel_open(GAChannel *c, const > gchar *path, > struct termios tio; > > assert(fd < 0); > - fd = qemu_open_old(path, O_RDWR | O_NOCTTY | O_NONBLOCK); > + fd = qemu_open_cloexec(path, O_RDWR | O_NOCTTY | O_NONBLOCK, 0, > errp); > if (fd == -1) { > - error_setg_errno(errp, errno, "error opening channel"); > return false; > } > tcgetattr(fd, &tio); > diff --git a/qga/commands-posix.c b/qga/commands-posix.c > index 7761458ce1..e8eafad74d 100644 > --- a/qga/commands-posix.c > +++ b/qga/commands-posix.c > @@ -1394,6 +1394,7 @@ static GuestDiskInfoList *get_disk_partitions( > > static void get_nvme_smart(GuestDiskInfo *disk) > { > + Error *err = NULL; > int fd; > GuestNVMeSmart *smart; > NvmeSmartLog log = {0}; > @@ -1406,9 +1407,10 @@ static void get_nvme_smart(GuestDiskInfo *disk) > | (((sizeof(log) >> 2) - 1) << 16) > }; > > - fd = qemu_open_old(disk->name, O_RDONLY); > + fd = qemu_open_cloexec(disk->name, O_RDONLY, 0, &err); > if (fd == -1) { > - g_debug("Failed to open device: %s: %s", disk->name, > g_strerror(errno)); > + g_debug("Failed to open device: %s: %s", disk->name, > error_get_pretty(err)); > + error_free(err); > return; > } > > @@ -1739,9 +1741,8 @@ int64_t qmp_guest_fsfreeze_freeze_list(bool > has_mountpoints, > } > } > > - fd = qemu_open_old(mount->dirname, O_RDONLY); > + fd = qemu_open_cloexec(mount->dirname, O_RDONLY, 0, errp); > if (fd == -1) { > - error_setg_errno(errp, errno, "failed to open %s", > mount->dirname); > goto error; > } > > @@ -1806,7 +1807,7 @@ int64_t qmp_guest_fsfreeze_thaw(Error **errp) > > QTAILQ_FOREACH(mount, &mounts, next) { > logged = false; > - fd = qemu_open_old(mount->dirname, O_RDONLY); > + fd = qemu_open_cloexec(mount->dirname, O_RDONLY, 0, NULL); > if (fd == -1) { > continue; > } > @@ -1866,21 +1867,20 @@ static void guest_fsfreeze_cleanup(void) > GuestFilesystemTrimResponse * > qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp) > { > + ERRP_GUARD(); > GuestFilesystemTrimResponse *response; > GuestFilesystemTrimResult *result; > int ret = 0; > FsMountList mounts; > struct FsMount *mount; > int fd; > - Error *local_err = NULL; > struct fstrim_range r; > > slog("guest-fstrim called"); > > QTAILQ_INIT(&mounts); > - build_fs_mount_list(&mounts, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > + build_fs_mount_list(&mounts, errp); > + if (*errp) { > return NULL; > } > > @@ -1892,11 +1892,11 @@ qmp_guest_fstrim(bool has_minimum, int64_t > minimum, Error **errp) > > QAPI_LIST_PREPEND(response->paths, result); > > - fd = qemu_open_old(mount->dirname, O_RDONLY); > + fd = qemu_open_cloexec(mount->dirname, O_RDONLY, 0, errp); > if (fd == -1) { > - result->error = g_strdup_printf("failed to open: %s", > - strerror(errno)); > + result->error = g_strdup(error_get_pretty(*errp)); > result->has_error = true; > + g_clear_pointer(errp, error_free); > continue; > } > > -- > 2.36.1 > >