diff options
author | Michael S. Tsirkin <mst@mellanox.co.il> | 2005-11-29 13:53:30 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2005-11-29 13:53:30 -0500 |
commit | 4f71055a45a503273c039d80db8ba9b13cb17549 (patch) | |
tree | bb4b6f10197addff1af91368f916904eb4404edf | |
parent | 2e86541ec878de9ec5771600a77f451a80bebfc4 (diff) |
IPoIB: protect child list in ipoib_ib_dev_flush
race condition: ipoib_ib_dev_flush is accessing child list without locks.
Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index 54ef2fea530f..23885801b6d2 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
@@ -608,9 +608,13 @@ void ipoib_ib_dev_flush(void *_dev) | |||
608 | if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) | 608 | if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) |
609 | ipoib_ib_dev_up(dev); | 609 | ipoib_ib_dev_up(dev); |
610 | 610 | ||
611 | down(&priv->vlan_mutex); | ||
612 | |||
611 | /* Flush any child interfaces too */ | 613 | /* Flush any child interfaces too */ |
612 | list_for_each_entry(cpriv, &priv->child_intfs, list) | 614 | list_for_each_entry(cpriv, &priv->child_intfs, list) |
613 | ipoib_ib_dev_flush(&cpriv->dev); | 615 | ipoib_ib_dev_flush(&cpriv->dev); |
616 | |||
617 | up(&priv->vlan_mutex); | ||
614 | } | 618 | } |
615 | 619 | ||
616 | void ipoib_ib_dev_cleanup(struct net_device *dev) | 620 | void ipoib_ib_dev_cleanup(struct net_device *dev) |