net/tap: setup exit notifier only when needed

No reason to setup notifier on each queue of multique tap,
when we actually want to run downscript only once.
As well, let's not setup notifier, when downscript is
not enabled (downsciprt="no").

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Vladimir Sementsov-Ogievskiy
2025-10-30 19:40:21 +03:00
committed by Jason Wang
parent fcc56cd23e
commit 0b72ea1ff5

View File

@@ -326,11 +326,9 @@ static void tap_exit_notify(Notifier *notifier, void *data)
TAPState *s = container_of(notifier, TAPState, exit);
Error *err = NULL;
if (s->down_script[0]) {
launch_script(s->down_script, s->down_script_arg, s->fd, &err);
if (err) {
error_report_err(err);
}
launch_script(s->down_script, s->down_script_arg, s->fd, &err);
if (err) {
error_report_err(err);
}
}
@@ -346,8 +344,11 @@ static void tap_cleanup(NetClientState *nc)
qemu_purge_queued_packets(nc);
tap_exit_notify(&s->exit, NULL);
qemu_remove_exit_notifier(&s->exit);
if (s->exit.notify) {
tap_exit_notify(&s->exit, NULL);
qemu_remove_exit_notifier(&s->exit);
s->exit.notify = NULL;
}
tap_read_poll(s, false);
tap_write_poll(s, false);
@@ -443,9 +444,6 @@ static TAPState *net_tap_fd_init(NetClientState *peer,
tap_read_poll(s, true);
s->vhost_net = NULL;
s->exit.notify = tap_exit_notify;
qemu_add_exit_notifier(&s->exit);
return s;
}
@@ -733,6 +731,8 @@ static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *peer,
snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
snprintf(s->down_script_arg, sizeof(s->down_script_arg),
"%s", ifname);
s->exit.notify = tap_exit_notify;
qemu_add_exit_notifier(&s->exit);
}
}