net/mlx4_en: Issue the dump eth statistics command under lock
authorEugenia Emantayev <eugenia@mellanox.com>
Thu, 24 Jan 2013 01:54:14 +0000 (01:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2013 05:13:56 +0000 (00:13 -0500)
Performing the DUMP_ETH_STATS firmware command outside the lock leads to kernel
panic when data structures such as RX/TX rings are freed in parallel, e.g when
one changes the mtu or ring sizes.

Signed-off-by: Eugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_netdev.c

index b467513..b6c645f 100644 (file)
@@ -977,12 +977,12 @@ static void mlx4_en_do_get_stats(struct work_struct *work)
        struct mlx4_en_dev *mdev = priv->mdev;
        int err;
 
-       err = mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 0);
-       if (err)
-               en_dbg(HW, priv, "Could not update stats\n");
-
        mutex_lock(&mdev->state_lock);
        if (mdev->device_up) {
+               err = mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 0);
+               if (err)
+                       en_dbg(HW, priv, "Could not update stats\n");
+
                if (priv->port_up)
                        mlx4_en_auto_moderation(priv);