Address a possible race

-------------------
Signed-off-by: Shirley Ma <xma@us.ibm.com>


 drivers/infiniband/ulp/ipoib/ipoib_cm.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 97e67d3..0886ee7 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -559,9 +559,12 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
 		else {
 			if (!--p->recv_count) {
 				spin_lock_irqsave(&priv->lock, flags);
-				list_move(&p->list, &priv->cm.rx_reap_list);
-				spin_unlock_irqrestore(&priv->lock, flags);
-				queue_work(ipoib_workqueue, &priv->cm.rx_reap_task);
+				if (p->state == IPOIB_CM_RX_LIVE) {
+					list_move(&p->list, &priv->cm.rx_reap_list);
+					spin_unlock_irqrestore(&priv->lock, flags);
+					queue_work(ipoib_workqueue, &priv->cm.rx_reap_task);
+				} else
+					spin_unlock_irqrestore(&priv->lock, flags);
 			}
 			return;
 		}
