[ovs-dev] [PATCH v2] netlink-socket: Exit NL transaction loop when EINVAL is returned
Eitan Eliahu
eliahue at vmware.com
Wed Apr 15 15:38:30 UTC 2015
Acked-by: Eitan Eliahu <eliahue at vmware.com>
Thanks Sorin,
Eitan
-----Original Message-----
From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Sorin Vinturis
Sent: Wednesday, April 15, 2015 2:31 AM
To: dev at openvswitch.org
Subject: [ovs-dev] [PATCH v2] netlink-socket: Exit NL transaction loop when EINVAL is returned
The nl_sock_transact_multiple function enters in an infinite loop, when invalid error, EINVAL, is returned by nl_sock_transact_multiple__.
EINVAL is the error returned by the latter function when a driver request fails.
v2: Any error returned by nl_sock_transact_multiple__, except EAGAIN, causes the rest of NL transactions to be aborted.
An error response from the driver is considered a successful transaction and the 'done' transactions counter is incremented.
Signed-off-by: Sorin Vinturis <svinturis at cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
Reported-at: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openvswitch_ovs-2Dissues_issues_57&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=CWsgHUxi6ExLXY798tmo3LJ4e3geGYp56lkcH-5cLCY&m=1N6hdMturzIaFRO2ATP9dnq9fQT12iWRqfJVO_bmUvw&s=VP1AHCbeR7vgEFNWbe3wBmThujk0NNfiKYbP2VZdkos&e=
---
lib/netlink-socket.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c index fab2a66..b73d843 100644
--- a/lib/netlink-socket.c
+++ b/lib/netlink-socket.c
@@ -797,8 +797,12 @@ nl_sock_transact_multiple__(struct nl_sock *sock,
txn->request->size,
reply_buf, sizeof reply_buf,
&reply_len, NULL)) {
+ /* The transaction was successfully sent but failed. */
+ (*done)++;
/* XXX: Map to a more appropriate error. */
error = EINVAL;
+ VLOG_DBG_RL(&rl, "fatal driver failure: %s",
+ ovs_lasterror_to_string());
break;
}
@@ -909,6 +913,11 @@ nl_sock_transact_multiple(struct nl_sock *sock,
} else if (error) {
VLOG_ERR_RL(&rl, "transaction error (%s)", ovs_strerror(error));
nl_sock_record_errors__(transactions, n, error);
+ if (error != EAGAIN) {
+ /* A fatal error have occured. Abort the rest of
+ * transactions. */
+ break;
+ }
}
}
}
--
1.9.0.msysgit.0
_______________________________________________
dev mailing list
dev at openvswitch.org
https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailman_listinfo_dev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=CWsgHUxi6ExLXY798tmo3LJ4e3geGYp56lkcH-5cLCY&m=1N6hdMturzIaFRO2ATP9dnq9fQT12iWRqfJVO_bmUvw&s=7NAcY0ICyK5QVOqfrFbaGe177U7Qu-az4hmbcyeo3U4&e=
More information about the dev
mailing list