forked from Minki/linux
IB/IPoIB: factor out common multicast list removal code
Code cleanup to remove multicast specific code from ipoib_main.c The removal of a list of multicast groups occurs in three places. Create a new function ipoib_mcast_remove_list(). Use this new function in ipoib_main.c too. That in turn allows the dropping of two functions that were exported from ipoib_multicast.c for expiration of mc groups. Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Christoph Lameter <cl@linux.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
e53505a802
commit
5a0e81f6f4
@ -495,7 +495,6 @@ void ipoib_dev_cleanup(struct net_device *dev);
|
|||||||
void ipoib_mcast_join_task(struct work_struct *work);
|
void ipoib_mcast_join_task(struct work_struct *work);
|
||||||
void ipoib_mcast_carrier_on_task(struct work_struct *work);
|
void ipoib_mcast_carrier_on_task(struct work_struct *work);
|
||||||
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb);
|
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb);
|
||||||
void ipoib_mcast_free(struct ipoib_mcast *mc);
|
|
||||||
|
|
||||||
void ipoib_mcast_restart_task(struct work_struct *work);
|
void ipoib_mcast_restart_task(struct work_struct *work);
|
||||||
int ipoib_mcast_start_thread(struct net_device *dev);
|
int ipoib_mcast_start_thread(struct net_device *dev);
|
||||||
@ -549,7 +548,7 @@ void ipoib_path_iter_read(struct ipoib_path_iter *iter,
|
|||||||
|
|
||||||
int ipoib_mcast_attach(struct net_device *dev, u16 mlid,
|
int ipoib_mcast_attach(struct net_device *dev, u16 mlid,
|
||||||
union ib_gid *mgid, int set_qkey);
|
union ib_gid *mgid, int set_qkey);
|
||||||
int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast);
|
void ipoib_mcast_remove_list(struct net_device *dev, struct list_head *remove_list);
|
||||||
struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgid);
|
struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgid);
|
||||||
|
|
||||||
int ipoib_init_qp(struct net_device *dev);
|
int ipoib_init_qp(struct net_device *dev);
|
||||||
|
@ -1150,7 +1150,7 @@ static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i;
|
int i;
|
||||||
LIST_HEAD(remove_list);
|
LIST_HEAD(remove_list);
|
||||||
struct ipoib_mcast *mcast, *tmcast;
|
struct ipoib_mcast *mcast;
|
||||||
struct net_device *dev = priv->dev;
|
struct net_device *dev = priv->dev;
|
||||||
|
|
||||||
if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
|
if (test_bit(IPOIB_STOP_NEIGH_GC, &priv->flags))
|
||||||
@ -1207,10 +1207,7 @@ static void __ipoib_reap_neigh(struct ipoib_dev_priv *priv)
|
|||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
|
ipoib_mcast_remove_list(dev, &remove_list);
|
||||||
ipoib_mcast_leave(dev, mcast);
|
|
||||||
ipoib_mcast_free(mcast);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ipoib_reap_neigh(struct work_struct *work)
|
static void ipoib_reap_neigh(struct work_struct *work)
|
||||||
|
@ -106,7 +106,7 @@ static void __ipoib_mcast_schedule_join_thread(struct ipoib_dev_priv *priv,
|
|||||||
queue_delayed_work(priv->wq, &priv->mcast_task, 0);
|
queue_delayed_work(priv->wq, &priv->mcast_task, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ipoib_mcast_free(struct ipoib_mcast *mcast)
|
static void ipoib_mcast_free(struct ipoib_mcast *mcast)
|
||||||
{
|
{
|
||||||
struct net_device *dev = mcast->dev;
|
struct net_device *dev = mcast->dev;
|
||||||
int tx_dropped = 0;
|
int tx_dropped = 0;
|
||||||
@ -677,7 +677,7 @@ int ipoib_mcast_stop_thread(struct net_device *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
||||||
{
|
{
|
||||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -704,6 +704,16 @@ int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ipoib_mcast_remove_list(struct net_device *dev, struct list_head *remove_list)
|
||||||
|
{
|
||||||
|
struct ipoib_mcast *mcast, *tmcast;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(mcast, tmcast, remove_list, list) {
|
||||||
|
ipoib_mcast_leave(dev, mcast);
|
||||||
|
ipoib_mcast_free(mcast);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb)
|
void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||||
@ -810,10 +820,7 @@ void ipoib_mcast_dev_flush(struct net_device *dev)
|
|||||||
if (test_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
|
if (test_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
|
||||||
wait_for_completion(&mcast->done);
|
wait_for_completion(&mcast->done);
|
||||||
|
|
||||||
list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
|
ipoib_mcast_remove_list(dev, &remove_list);
|
||||||
ipoib_mcast_leave(dev, mcast);
|
|
||||||
ipoib_mcast_free(mcast);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ipoib_mcast_addr_is_valid(const u8 *addr, const u8 *broadcast)
|
static int ipoib_mcast_addr_is_valid(const u8 *addr, const u8 *broadcast)
|
||||||
@ -939,10 +946,7 @@ void ipoib_mcast_restart_task(struct work_struct *work)
|
|||||||
if (test_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
|
if (test_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags))
|
||||||
wait_for_completion(&mcast->done);
|
wait_for_completion(&mcast->done);
|
||||||
|
|
||||||
list_for_each_entry_safe(mcast, tmcast, &remove_list, list) {
|
ipoib_mcast_remove_list(mcast->dev, &remove_list);
|
||||||
ipoib_mcast_leave(mcast->dev, mcast);
|
|
||||||
ipoib_mcast_free(mcast);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Double check that we are still up
|
* Double check that we are still up
|
||||||
|
Loading…
Reference in New Issue
Block a user