Hi Sorin, It would be probably better to make this call synchronous as the thread has nothing else to do. The WFP transaction in the driver is guaranteed to being completed so we should be ok here. Thanks, Eitan
-----Original Message----- From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Sorin Vinturis Sent: Thursday, March 12, 2015 5:43 PM To: dev@openvswitch.org Subject: [ovs-dev] [PATCH 3/3] netlink: support for asynchronous NL transactions Modified 'nl_sock_transact_multiple__' function to send asynchronous I/O requests to the kernel driver. 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_64&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=CWsgHUxi6ExLXY798tmo3LJ4e3geGYp56lkcH-5cLCY&m=mnPxbs5kxqNdJzi-qc-vofl6JQrEuyx3Tb5Uxj5l7YA&s=vGvK7gc_nZkPLpeiZVXNdRHky8DjHd9aT46oNKn8lmI&e= --- lib/netlink-socket.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c index e4f153f..64f93ff 100644 --- a/lib/netlink-socket.c +++ b/lib/netlink-socket.c @@ -832,10 +832,28 @@ nl_sock_transact_multiple__(struct nl_sock *sock, ofpbuf_data(txn->request), ofpbuf_size(txn->request), reply_buf, sizeof reply_buf, - &reply_len, NULL)) { - /* XXX: Map to a more appropriate error. */ - error = EINVAL; - break; + &reply_len, &sock->overlapped)) { + if (GetLastError() != ERROR_IO_PENDING) { + /* XXX: Map to a more appropriate error. */ + VLOG_DBG_RL(&rl, "nl_transact operation failed - %s", + ovs_strerror(error)); + error = EINVAL; + break; + } else { + /* Operation has been queued and will complete in the future. */ + /* Wait for the operation to complete before continuing. */ + if (!GetOverlappedResult(sock->handle, + &sock->overlapped, + &reply_len, + TRUE)) { + /* Operation has completed, but it failed. */ + /* XXX: Map to a more appropriate error. */ + VLOG_DBG_RL(&rl, "nl_transact asynchronous operation failed - %s", + ovs_strerror(error)); + error = EINVAL; + break; + } + } } if (reply_len < sizeof *reply_nlmsg) { -- 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=mnPxbs5kxqNdJzi-qc-vofl6JQrEuyx3Tb5Uxj5l7YA&s=Ea6-zNGdcWXl55yngXjvxDyuRn1v9WCsX8B3jJj5mtA&e= _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev