Commit 0b72ea1ff5 for qemu.org

commit 0b72ea1ff558b9a70859fc018f7c7485b6eb3ac9
Author: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Date:   Thu Oct 30 19:40:21 2025 +0300

    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>

diff --git a/net/tap.c b/net/tap.c
index c7d8e1a3be..5af157164e 100644
--- a/net/tap.c
+++ b/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);
         }
     }