Thu, Nov 26, 2015 at 10:52:24AM CET, ctcard1@gmail.com wrote:
Fix the get_ifinfo_list() function to retry if nl_recvmsgs fails with error -NLE_DUMP_INTR. Add some extra error reporting to get_ifinfo_list(). This is a fix for https://bugzilla.redhat.com/show_bug.cgi?id=1273052
Signed-off-by: Chris Card ctcard1@gmail.com
libteam/ifinfo.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-)
diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c index 484ac1b..df3d49a 100644 --- a/libteam/ifinfo.c +++ b/libteam/ifinfo.c @@ -332,24 +332,39 @@ int get_ifinfo_list(struct team_handle *th) .rtgen_family = AF_UNSPEC, }; int ret;
- ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
&rt_hdr, sizeof(rt_hdr));
- if (ret < 0)
return -nl2syserr(ret);
- orig_cb = nl_socket_get_cb(th->nl_cli.sock);
- cb = nl_cb_clone(orig_cb);
- nl_cb_put(orig_cb);
- if (!cb)
return -ENOMEM;
- nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
- ret = nl_recvmsgs(th->nl_cli.sock, cb);
- nl_cb_put(cb);
- int retry = 1;
- while (retry) {
retry = 0;
ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
&rt_hdr, sizeof(rt_hdr));
if (ret < 0) {
err(th, "get_ifinfo_list: nl_send_simple failed");
return -nl2syserr(ret);
}
orig_cb = nl_socket_get_cb(th->nl_cli.sock);
cb = nl_cb_clone(orig_cb);
nl_cb_put(orig_cb);
if (!cb) {
err(th, "get_ifinfo_list: nl_cb_clone failed");
return -ENOMEM;
}
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
ret = nl_recvmsgs(th->nl_cli.sock, cb);
nl_cb_put(cb);
if (ret < 0) {
err(th, "get_ifinfo_list: nl_recvmsgs failed");
if (ret != -NLE_DUMP_INTR)
return -nl2syserr(ret);
retry = 1;
^ during the apply, this trailing whitespace was discovered. I removed it manually.
Applied. Thanks.