From: Yannick Cote Date: Tue, 30 Sep 2008 04:24:04 +0000 (-0700) Subject: IB/ipath: Fix hang on module unload X-Git-Tag: v2.6.28-rc1~727^2^4 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=e441d6342890838bfc6d64ca2f0964aca08ae2a2;p=linux-2.6-omap-h63xx.git IB/ipath: Fix hang on module unload Handle the case where posting a send is requested when the link is down. This fixes . Signed-off-by: Yannick Cote Signed-off-by: Roland Dreier --- diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index b766e40e9eb..eabc4247860 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c @@ -340,9 +340,16 @@ static int ipath_post_one_send(struct ipath_qp *qp, struct ib_send_wr *wr) int acc; int ret; unsigned long flags; + struct ipath_devdata *dd = to_idev(qp->ibqp.device)->dd; spin_lock_irqsave(&qp->s_lock, flags); + if (qp->ibqp.qp_type != IB_QPT_SMI && + !(dd->ipath_flags & IPATH_LINKACTIVE)) { + ret = -ENETDOWN; + goto bail; + } + /* Check that state is OK to post send. */ if (unlikely(!(ib_ipath_state_ops[qp->state] & IPATH_POST_SEND_OK))) goto bail_inval;