On 2020-11-26 16:53:57 [-0400], Jason Gunthorpe wrote: > > --- a/drivers/infiniband/ulp/iser/iscsi_iser.c > > +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c > > @@ -187,12 +187,8 @@ iser_initialize_task_headers(struct iscsi_task *task, > > struct iser_device *device = iser_conn->ib_conn.device; > > struct iscsi_iser_task *iser_task = task->dd_data; > > u64 dma_addr; > > - const bool mgmt_task = !task->sc && !in_interrupt(); > > int ret = 0; > > Why do you think the task->sc doesn't matter? Based on the call paths I checked, there was no evidence that state_mutex can be acquired. If I remove locking here then `mgmt_task' is no longer needed. How should task->sc matter? > > - if (unlikely(mgmt_task)) > > - mutex_lock(&iser_conn->state_mutex); > > - > > if (unlikely(iser_conn->state != ISER_CONN_UP)) { > > ret = -ENODEV; > > goto out; … > Jason Sebastian