[ovs-git] [openvswitch/ovs] c62da6: netdev-dpdk: Fix crash when changing the vhost-use...

GitHub noreply at github.com
Wed Mar 23 01:29:26 UTC 2016

  Branch: refs/heads/master
  Home:   https://github.com/openvswitch/ovs
  Commit: c62da695974476a3dd871325d01283c2960e1fd1
  Author: Ilya Maximets <i.maximets at samsung.com>
  Date:   2016-03-22 (Tue, 22 Mar 2016)

  Changed paths:
    M lib/netdev-dpdk.c

  Log Message:
  netdev-dpdk: Fix crash when changing the vhost-user port.

According to netdev-provider API:
	'The "destruct" function is not allowed to fail.'

netdev-dpdk breaks this restriction for vhost-user ports.
This leads to SIGABRT or SIGSEGV in dpdk_watchdog thread
because 'dealloc' will be called anyway indifferently
to result of 'destruct'.

For example, if we call
	# ovs-vsctl set interface vhost1 ofport_request=5
while QEMU still attached, we'll get:
|dpdk|ERR|Can not remove port, vhost device still attached
VHOST_CONFIG: socket created, fd:98
VHOST_CONFIG: fail to bind fd:98, remove file:/home/vhost1 and try again.
|dpdk|ERR|vhost-user socket device setup failure for socket /home/vhost1
|bridge|WARN|could not open network device vhost1 (Unknown error -1)
ovs-vswitchd(dpdk_watchdog1): lib/netdev-dpdk.c:532: ovs_mutex_lock_at()
  passed uninitialized ovs_mutex

Program received signal SIGABRT, Aborted.

Fix that by removing port anyway even when guest is still
attached. Guest becomes an orphan in that case but OVS
will not crash and will continue forwarding for other ports.
VM restart required to restore connectivity.

Fixes: 58397e6c1e6c ("netdev-dpdk: add dpdk vhost-cuse ports")
Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
Acked-by: Kevin Traynor <kevin.traynor at intel.com>
Acked-by: Daniele Di Proietto <diproiettod at vmware.com>

More information about the git mailing list