From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [PATCH v4 3/3] API: Remove TST_ERR usage from rtnetlink/netdevice
Date: Tue, 22 Jun 2021 15:40:27 +0200 [thread overview]
Message-ID: <YNHoS1L+0toUtAWT@yuki> (raw)
In-Reply-To: <1e7ecce7-2e46-ea46-3c5b-357d53a238c3@suse.cz>
Hi!
> > The test author is guaranteed that the library will not set TST_ERR
> > except via the TEST macro and similar.
>
> Hi, who decided to guarantee this and where is the guarantee documented?
That is the whole point of the API, keep TST_RET and TST_ERR until
explicitly changed by either chaning them directly or via the TEST()
macro.
> I was planning to document that RTNL_SEND_VALIDATE() and
> RTNL_CHECK_ACKS() will pass error codes found in rtnetlink ACK messages
> through TST_ERR.
>
> On 17. 06. 21 10:40, Richard Palethorpe wrote:
> > Hello,
> >
> > Cyril Hrubis <chrubis@suse.cz> writes:
> >> I do not like this fix. If nothing else it's fragile and would make any
> >> patch review for these libraries much harder.
> >>
> >> I would prefer having these functions modified to return the errors
> >> instead even if I have to do the work.
>
> Changing the return value to always return errno will be a major PITA
> because 95% of error handling happens after some safe_syscall() which
> clobbers errno by calling tst_brk() after failure. And if you only want
> to return error codes from rtnetlink ACK messages, then there's the
> problem what to return when a safe_syscall() fails during cleanup().
For the current code it would be as easy as:
diff --git a/lib/tst_netdevice.c b/lib/tst_netdevice.c
index d098173d5..b4b10944d 100644
--- a/lib/tst_netdevice.c
+++ b/lib/tst_netdevice.c
@@ -148,10 +148,10 @@ int tst_create_veth_pair(const char *file, const int lineno,
ret = tst_rtnl_send_validate(file, lineno, ctx);
tst_rtnl_destroy_context(file, lineno, ctx);
- if (!ret) {
- tst_brk_(file, lineno, TBROK | TTERRNO,
- "Failed to create veth interfaces %s+%s", ifname1,
- ifname2);
+ if (ret) {
+ tst_brk_(file, lineno, TBROK,
+ "Failed to create veth interfaces %s+%s: %s", ifname1,
+ ifname2, tst_strerrno(ret));
}
return ret;
@@ -182,9 +182,9 @@ int tst_remove_netdev(const char *file, const int lineno, const char *ifname)
ret = tst_rtnl_send_validate(file, lineno, ctx);
tst_rtnl_destroy_context(file, lineno, ctx);
- if (!ret) {
+ if (ret) {
tst_brk_(file, lineno, TBROK | TTERRNO,
- "Failed to remove netdevice %s", ifname);
+ "Failed to remove netdevice %s: %s", ifname, tst_strerrno(ret));
}
return ret;
@@ -231,9 +231,9 @@ static int modify_address(const char *file, const int lineno,
ret = tst_rtnl_send_validate(file, lineno, ctx);
tst_rtnl_destroy_context(file, lineno, ctx);
- if (!ret) {
+ if (ret) {
tst_brk_(file, lineno, TBROK | TTERRNO,
- "Failed to modify %s network address", ifname);
+ "Failed to modify %s network address: %s", ifname, tst_strerrno(ret));
}
return ret;
@@ -300,9 +300,9 @@ static int change_ns(const char *file, const int lineno, const char *ifname,
ret = tst_rtnl_send_validate(file, lineno, ctx);
tst_rtnl_destroy_context(file, lineno, ctx);
- if (!ret) {
+ if (ret) {
tst_brk_(file, lineno, TBROK | TTERRNO,
- "Failed to move %s to another namespace", ifname);
+ "Failed to move %s to another namespace: %s", ifname, tst_strerrno(ret));
}
return ret;
@@ -391,9 +391,9 @@ static int modify_route(const char *file, const int lineno, unsigned int action,
ret = tst_rtnl_send_validate(file, lineno, ctx);
tst_rtnl_destroy_context(file, lineno, ctx);
- if (!ret) {
+ if (ret) {
tst_brk_(file, lineno, TBROK | TTERRNO,
- "Failed to modify network route");
+ "Failed to modify network route", tst_strerrno(ret));
}
return ret;
diff --git a/lib/tst_rtnetlink.c b/lib/tst_rtnetlink.c
index 1ecda3a9f..c5f1aa0dc 100644
--- a/lib/tst_rtnetlink.c
+++ b/lib/tst_rtnetlink.c
@@ -376,16 +376,14 @@ int tst_rtnl_check_acks(const char *file, const int lineno,
tst_brk_(file, lineno, TBROK,
"No ACK found for Netlink message %u",
msg->nlmsg_seq);
- return 0;
+ return EPROTO;
}
- if (res->err->error) {
- TST_ERR = -res->err->error;
- return 0;
- }
+ if (res->err->error)
+ return res->err->error;
}
- return 1;
+ return 0;
}
int tst_rtnl_send_validate(const char *file, const int lineno,
@@ -394,8 +392,6 @@ int tst_rtnl_send_validate(const char *file, const int lineno,
struct tst_rtnl_message *response;
int ret;
- TST_ERR = 0;
-
if (tst_rtnl_send(file, lineno, ctx) <= 0)
return 0;
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2021-06-22 13:40 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-15 7:40 [LTP] [PATCH v4 1/3] Add Coccinelle helper scripts for reference Richard Palethorpe
2021-06-15 7:40 ` [LTP] [PATCH v4 2/3] API: Remove TEST macro usage from library Richard Palethorpe
2021-06-15 13:23 ` Cyril Hrubis
2021-06-16 6:37 ` Li Wang
2021-06-17 7:45 ` Richard Palethorpe
2021-06-15 7:40 ` [LTP] [PATCH v4 3/3] API: Remove TST_ERR usage from rtnetlink/netdevice Richard Palethorpe
2021-06-15 13:29 ` Cyril Hrubis
2021-06-17 8:40 ` Richard Palethorpe
2021-06-22 13:49 ` Martin Doucha
2021-06-22 13:40 ` Cyril Hrubis [this message]
2021-06-22 14:25 ` Martin Doucha
2021-06-22 14:14 ` Cyril Hrubis
2021-06-23 10:24 ` Richard Palethorpe
2021-06-15 13:22 ` [LTP] [PATCH v4 1/3] Add Coccinelle helper scripts for reference Cyril Hrubis
2021-06-16 7:24 ` Li Wang
2021-06-16 7:48 ` Li Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YNHoS1L+0toUtAWT@yuki \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.