When users pre-create a tap device to use with multiqueue interface that
has `managed="no"`, change the error so that it does not indicate we are
trying to create the device, and on top of that hint at the most
probable error cause.
Resolves: https://issues.redhat.com/browse/RHEL-55749
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
---
src/util/virnetdevtap.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
index 55536b5f4be2..3df4dc129f0c 100644
--- a/src/util/virnetdevtap.c
+++ b/src/util/virnetdevtap.c
@@ -230,9 +230,16 @@ int virNetDevTapCreate(char **ifname,
}
if (ioctl(fd, TUNSETIFF, &ifr) < 0) {
- virReportSystemError(errno,
- _("Unable to create tap device %1$s"),
- *ifname);
+ if (flags & VIR_NETDEV_TAP_CREATE_ALLOW_EXISTING &&
+ tapfdSize > 0) {
+ virReportSystemError(errno,
+ _("Unable to create multiple fds for tap device %1$s (maybe existing device was created without multi_queue flag)"),
+ *ifname);
+ } else {
+ virReportSystemError(errno,
+ _("Unable to create tap device %1$s"),
+ *ifname);
+ }
goto cleanup;
}
@@ -247,7 +254,7 @@ int virNetDevTapCreate(char **ifname,
ioctl(fd, TUNSETPERSIST, 1) < 0) {
virReportSystemError(errno,
_("Unable to set tap device %1$s to persistent"),
- *ifname);
+ NULLSTR(*ifname));
goto cleanup;
}
tapfd[i] = fd;
--
2.46.0
On 9/4/24 10:39, Martin Kletzander wrote:
> When users pre-create a tap device to use with multiqueue interface that
> has `managed="no"`, change the error so that it does not indicate we are
> trying to create the device, and on top of that hint at the most
> probable error cause.
>
> Resolves: https://issues.redhat.com/browse/RHEL-55749
> Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
> ---
> src/util/virnetdevtap.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/virnetdevtap.c b/src/util/virnetdevtap.c
> index 55536b5f4be2..3df4dc129f0c 100644
> --- a/src/util/virnetdevtap.c
> +++ b/src/util/virnetdevtap.c
> @@ -247,7 +254,7 @@ int virNetDevTapCreate(char **ifname,
> ioctl(fd, TUNSETPERSIST, 1) < 0) {
> virReportSystemError(errno,
> _("Unable to set tap device %1$s to persistent"),
> - *ifname);
> + NULLSTR(*ifname));
> goto cleanup;
> }
> tapfd[i] = fd;
This hunk does not belong here.
Michal
© 2016 - 2026 Red Hat, Inc.