On 08/31/12 20:00, [email protected] wrote: > From: Dongsu Park <[email protected]> > > Signed-off-By: Sebastian Riemer <[email protected]> > --- > drivers/infiniband/ulp/srp/ib_srp.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c > b/drivers/infiniband/ulp/srp/ib_srp.c > index a0d0ca2..1b274484 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -534,7 +534,6 @@ static void srp_wait_last_send_wqe(struct srp_target_port > *target) > msleep(20); > } > > - WARN_ON(!target->last_send_wqe); > } > > static void srp_disconnect_target(struct srp_target_port *target)
The purpose of the functions srp_wait_last_recv_wqe() and srp_wait_last_send_wqe() is to wait until the IB HCA has finished delivering work completions to ib_srp. The InfiniBand Architecture Manual specifies how long that can take. If the above WARN_ON() statement is hit it means that it took longer than expected before all pending work was completed. Letting srp_wait_last_send_wqe() return before all pending work has been completed is dangerous because that may trigger a use-after-free in the code that calls that function. So we have to dig deeper here and find out why that WARN_ON() statement was hit. Bart. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
