[LTP] [PATCH v3 2/4] tst_netlink_check_acks(): Stop on first error regardless of ACK request

Martin Doucha
2023-11-16T16:48:25Z

tst_netlink_check_acks() currently ignores errors in response
to netlink messages that did not explicitly ask for ack.
If a multimessage netlink request fails early, this will lead
to TBROK failures due to missing acks. Return the first netlink
error even if the corresponding request did not ask for ack.

Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---

Changes since v2: New patch

lib/tst_netlink.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/lib/tst_netlink.c b/lib/tst_netlink.c
index 7bc98af56..d61cc8b88 100644
--- a/lib/tst_netlink.c
+++ b/lib/tst_netlink.c
@@ -455,18 +455,19 @@ int tst_netlink_check_acks(const char *file, const int lineno,
if (!(msg->nlmsg_flags & NLM_F_ACK))
continue;

- while (res->header && res->header->nlmsg_seq != msg->nlmsg_seq)
+ while (res->header && !(res->err && res->err->error) &&
+ res->header->nlmsg_seq != msg->nlmsg_seq)
res++;

- if (!res->err || res->header->nlmsg_seq != msg->nlmsg_seq) {
- tst_brk_(file, lineno, TBROK,
- "No ACK found for Netlink message %u",
- msg->nlmsg_seq);
+ if (res->err && res->err->error) {
+ tst_netlink_errno = -res->err->error;
return 0;
}

- if (res->err->error) {
- tst_netlink_errno = -res->err->error;
+ if (!res->header || res->header->nlmsg_seq != msg->nlmsg_seq) {
+ tst_brk_(file, lineno, TBROK,
+ "No ACK found for Netlink message %u",
+ msg->nlmsg_seq);
return 0;
}
}
--
2.42.1