]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: skip to reassign master ifindex if already set
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 27 Oct 2022 21:40:07 +0000 (06:40 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 31 Oct 2022 20:13:49 +0000 (21:13 +0100)
Otherwise, the slave interface may go down, especially when the master
is bond.

Fixes #25067.

src/network/networkd-setlink.c

index f9d774eee9e38331305b1f6e9efd253641c9cc88..b6aaa1e9dbc4e345da32888ba23fedd75fc1e20a 100644 (file)
@@ -543,6 +543,12 @@ static int link_is_ready_to_set_link(Link *link, Request *req) {
                         m = link->network->vrf->ifindex;
                 }
 
+                if (m == (uint32_t) link->master_ifindex) {
+                        /* The requested master is already set. */
+                        link->master_set = true;
+                        return -EALREADY; /* indicate to cancel the request. */
+                }
+
                 req->userdata = UINT32_TO_PTR(m);
                 break;
         }
@@ -568,6 +574,8 @@ static int link_process_set_link(Request *req, Link *link, void *userdata) {
         assert(link);
 
         r = link_is_ready_to_set_link(link, req);
+        if (r == -EALREADY)
+                return 1; /* Cancel the request. */
         if (r <= 0)
                 return r;