From ebf95ef2fa915a7f0e2e747651391f07aa2fb180 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 28 Oct 2022 06:40:07 +0900 Subject: [PATCH] network: skip to reassign master ifindex if already set Otherwise, the slave interface may go down, especially when the master is bond. Fixes #25067. --- src/network/networkd-setlink.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c index f9d774eee9e38..b6aaa1e9dbc4e 100644 --- a/src/network/networkd-setlink.c +++ b/src/network/networkd-setlink.c @@ -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;