aboutsummaryrefslogtreecommitdiff
path: root/lib/netdev-dummy.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2013-08-27 17:15:53 -0700
committerBen Pfaff <blp@nicira.com>2013-08-27 21:50:40 -0700
commit89454bf477d1dc95357792677ccbd4d483ab42d8 (patch)
treec66eb9b3091ee542442f3868c0b03a941148435b /lib/netdev-dummy.c
parent8037acb42c04aa50011a2b34d1fe4a715c73a4b7 (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.c4
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 */