From 728db22475f81a36da365225c172d9ca3baf88ba Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 10 Nov 2021 14:12:39 -0500 Subject: [PATCH] zebra: When we get an implicit or ack or full failure mark status When nl_batch_read_resp gets a full on failure -1 or an implicit ack 0 from the kernel for a batch of code. Let's immediately mark all of those in the batch pass/fail as needed. Instead of having them marked else where. Signed-off-by: Donald Sharp (cherry picked from commit 00249e255ee651eefb027f3a3c8deb0f130f6193) --- zebra/kernel_netlink.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c index d614aa26d0..26ceea2057 100644 --- a/zebra/kernel_netlink.c +++ b/zebra/kernel_netlink.c @@ -1125,8 +1125,25 @@ static int nl_batch_read_resp(struct nl_batch *bth) while (true) { status = netlink_recv_msg(nl, msg, nl_batch_rx_buf, sizeof(nl_batch_rx_buf)); - if (status == -1 || status == 0) + /* + * status == -1 is a full on failure somewhere + * since we don't know where the problem happened + * we must mark all as failed + * + * Else we mark everything as worked + * + */ + if (status == -1 || status == 0) { + while ((ctx = dplane_ctx_dequeue(&(bth->ctx_list))) != + NULL) { + if (status == -1) + dplane_ctx_set_status( + ctx, + ZEBRA_DPLANE_REQUEST_FAILURE); + dplane_ctx_enqueue_tail(bth->ctx_out_q, ctx); + } return status; + } h = (struct nlmsghdr *)nl_batch_rx_buf; ignore_msg = false;