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:
committed by
Jason Wang
parent
fcc56cd23e
commit
0b72ea1ff5
20
net/tap.c
20
net/tap.c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user