浏览代码

mlx4_en: nullify cached multicast address list after cleanup

Solves an issue where we tried to free the same page twice after
the port has been opened and closed.

Signed-off-by: Alexander Guller <alexg@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Alexander Guller 13 年之前
父节点
当前提交
0e03567a2c
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      drivers/net/ethernet/mellanox/mlx4/en_netdev.c

+ 2 - 0
drivers/net/ethernet/mellanox/mlx4/en_netdev.c

@@ -151,6 +151,7 @@ static void mlx4_en_clear_list(struct net_device *dev)
 	struct mlx4_en_priv *priv = netdev_priv(dev);
 	struct mlx4_en_priv *priv = netdev_priv(dev);
 
 
 	kfree(priv->mc_addrs);
 	kfree(priv->mc_addrs);
+	priv->mc_addrs = NULL;
 	priv->mc_addrs_cnt = 0;
 	priv->mc_addrs_cnt = 0;
 }
 }
 
 
@@ -170,6 +171,7 @@ static void mlx4_en_cache_mclist(struct net_device *dev)
 	i = 0;
 	i = 0;
 	netdev_for_each_mc_addr(ha, dev)
 	netdev_for_each_mc_addr(ha, dev)
 		memcpy(mc_addrs + i++ * ETH_ALEN, ha->addr, ETH_ALEN);
 		memcpy(mc_addrs + i++ * ETH_ALEN, ha->addr, ETH_ALEN);
+	mlx4_en_clear_list(dev);
 	priv->mc_addrs = mc_addrs;
 	priv->mc_addrs = mc_addrs;
 	priv->mc_addrs_cnt = mc_addrs_cnt;
 	priv->mc_addrs_cnt = mc_addrs_cnt;
 }
 }