From: Martin Schwenke Date: Thu, 23 Jun 2022 04:30:34 +0000 (+1000) Subject: ctdb-daemon: Avoid spurious error sending ARPs for released IP X-Git-Tag: tevent-0.13.0~47 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d62fcba7dce6038c02c12b3531e953e7b808614a;p=thirdparty%2Fsamba.git ctdb-daemon: Avoid spurious error sending ARPs for released IP A public IP address can be released in between (and probably before) attempts to send ARPs. One situation when this can occur is when a cluster is shutting down: node A shuts down first, public IPs from node A are taken over by node B, node B is shutdown. Notice this when it occurs and cancel further attempts to send ARPs. Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs --- diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index 99efb0af356..81c733a9c48 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -373,8 +373,17 @@ static void ctdb_control_send_arp(struct tevent_context *ev, struct ctdb_takeover_arp); int ret; struct ctdb_tcp_array *tcparray; - const char *iface = ctdb_vnn_iface_string(arp->vnn); + const char *iface; + + /* IP address might have been released between sends */ + if (arp->vnn->iface == NULL) { + DBG_INFO("Cancelling ARP send for released IP %s\n", + ctdb_addr_to_str(&arp->vnn->public_address)); + talloc_free(arp); + return; + } + iface = ctdb_vnn_iface_string(arp->vnn); ret = ctdb_sys_send_arp(&arp->addr, iface); if (ret != 0) { DBG_ERR("Failed to send ARP on interface %s: %s\n",