[ovs-git] Open vSwitch: netdev: Fix deadlock when netdev_dump_queues() callback calls into netdev. (master)

dev at openvswitch.org dev at openvswitch.org
Wed Aug 28 04:54:51 UTC 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Open vSwitch".

The branch, master has been updated
       via  89454bf477d1dc95357792677ccbd4d483ab42d8 (commit)
      from  8037acb42c04aa50011a2b34d1fe4a715c73a4b7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 89454bf477d1dc95357792677ccbd4d483ab42d8
Diffs: http://openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=commitdiff;h=89454bf477d1dc95357792677ccbd4d483ab42d8
Author: Ben Pfaff <blp at nicira.com>
		
netdev: Fix deadlock when netdev_dump_queues() callback calls into netdev.
		
We have a call chain like this:

    iface_configure_qos() calls
        netdev_dump_queues(), which calls
            netdev_linux_dump_queues(), which calls back through 'cb' to
                qos_unixctl_show_cb(), which calls
                    netdev_delete_queue(), which calls
                        netdev_linux_delete_queue().

Both netdev_dump_queues() and netdev_linux_delete_queue() take the same
mutex in the same netdev, which deadlocks.

This commit fixes the problem by getting rid of the callback.

netdev_linux_dump_queue_stats() would benefit from the same treatment but
it's less urgent because I don't see any callbacks from that function that
call back into a netdev function.

Bug #19319.
Reported-by: Scott Hendricks <shendricks at vmware.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>


-----------------------------------------------------------------------

Summary of changes:
 lib/netdev-dummy.c    |    4 ++-
 lib/netdev-linux.c    |   79 +++++++++++++++++++++++++++++++++------------
 lib/netdev-provider.h |   49 +++++++++++++++++++---------
 lib/netdev-vport.c    |    4 ++-
 lib/netdev.c          |   86 ++++++++++++++++++++++++++++++++++++++-----------
 lib/netdev.h          |   41 ++++++++++++++++++++---
 vswitchd/bridge.c     |   62 +++++++++++++++--------------------
 7 files changed, 226 insertions(+), 99 deletions(-)


hooks/post-receive
-- 
Open vSwitch



More information about the git mailing list