diff options
author | Ben Pfaff <blp@nicira.com> | 2013-08-27 17:15:53 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2013-08-27 21:50:40 -0700 |
commit | 89454bf477d1dc95357792677ccbd4d483ab42d8 (patch) | |
tree | c66eb9b3091ee542442f3868c0b03a941148435b /lib/netdev-dummy.c | |
parent | 8037acb42c04aa50011a2b34d1fe4a715c73a4b7 (diff) |
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@vmware.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/netdev-dummy.c')
-rw-r--r-- | lib/netdev-dummy.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index ac265649..16a6b0b5 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -708,7 +708,9 @@ static const struct netdev_class dummy_class = { NULL, /* set_queue */ NULL, /* delete_queue */ NULL, /* get_queue_stats */ - NULL, /* dump_queues */ + NULL, /* queue_dump_start */ + NULL, /* queue_dump_next */ + NULL, /* queue_dump_done */ NULL, /* dump_queue_stats */ NULL, /* get_in4 */ |