If we remove the increment of the transaction than the whole sequence of 
transaction will be lost. This should be done only after we change the driver 
to never fail in case the transaction fail. The current driver fails also when 
there are transaction level erros and when there are some other "temporary" 
errors. I would prefer to move to the next transaction in that case rather than 
dump the whole sequence. 
Thanks,
Eitan

-----Original Message-----
From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Sorin Vinturis
Sent: Wednesday, April 15, 2015 1:22 PM
To: dev@openvswitch.org
Subject: [ovs-dev] [PATCH v4] 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.

v3: Removed the incrementation of the transactions counter in case of driver 
request failure.

Signed-off-by: Sorin Vinturis <svintu...@cloudbasesolutions.com>
Reported-by: Alin Gabriel Serdean <aserd...@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=SoJBySQ9Ab0iZ66kD5oQW1lNQi2mdEyB-hkYI_568PY&s=qlfxf-x6rCbgRjcbZqeI1d7oSV9FpZDsQr1jdgHz_wI&e=
Acked-by: Eitan Eliahu <elia...@vmware.com>
Acked-by: Nithin Raju <nit...@vmware.com>
---
 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)) {
             /* 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 has occured. Abort the rest of
+                 * transactions. */
+                break;
+            }
         }
     }
 }
--
1.9.0.msysgit.0
_______________________________________________
dev mailing list
dev@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=SoJBySQ9Ab0iZ66kD5oQW1lNQi2mdEyB-hkYI_568PY&s=CJsqfRiyJVs7TlbH5t9Cuugwakz_9cloFcKkSdXxxKk&e=
 
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to