vhost: fix connect hang in client mode
authorIlya Maximets <i.maximets@samsung.com>
Thu, 21 Jul 2016 13:19:35 +0000 (16:19 +0300)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 21 Jul 2016 22:21:51 +0000 (00:21 +0200)
commit81b5d22f1d52c1ad4f6d069c14199c91f608435d
treefb11452f8fee530e69619d6771141ce6ea696bb8
parent53ecfa24fbcd17d9855937391ce347f37434fbfa
vhost: fix connect hang in client mode

If something abnormal happened to QEMU, 'connect()' can block calling
thread (e.g. main thread of OVS) forever or for a really long time.
This can break whole application or block the reconnection thread.

Example with OVS:

ovs_rcu(urcu2)|WARN|blocked 512000 ms waiting for main to quiesce
(gdb) bt
#0  connect () from /lib64/libpthread.so.0
#1  vhost_user_create_client (vsocket=0xa816e0)
#2  rte_vhost_driver_register
#3  netdev_dpdk_vhost_user_construct
#4  netdev_open (name=0xa664b0 "vhost1")
[...]
#11 main

Fix that by setting non-blocking mode for client sockets for connection.

Fixes: 64ab701c3d1e ("vhost: add vhost-user client mode")

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
lib/librte_vhost/vhost_user/vhost-net-user.c