Bart Van Assche wrote:
On Fri, Oct 23, 2009 at 1:13 AM, Vu Pham <[email protected]> wrote:
[ ... ]
Here is the updated patch which implement the device_loss_timeout for each
target instead of module parameter. It also reflects changes from previous
feedbacks. Please review
Introducing device_loss_timeout per target granularity. Creating a timer to
clean up connection after device_loss_timeout expired. During
device_loss_timeout, the QP is in error state, srp will return DID_RESET
for outstanding I/Os and return FAILED for abort_cmd, reset_lun, and return
SUCCESS (without retrying reconnect) on reset_host
Signed-off-by: Vu Pham <[email protected]>
-----------------------------------------------------------------------
drivers/infiniband/ulp/srp/ib_srp.c | 94 ++++++++++++++++++++++++++++++++++-
drivers/infiniband/ulp/srp/ib_srp.h | 3 +
2 files changed, 95 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c
b/drivers/infiniband/ulp/srp/ib_srp.c
index e44939a..12404d5 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -433,6 +433,10 @@ static void srp_remove_work(struct work_struct *work)
return;
}
target->state = SRP_TARGET_REMOVED;
+
+ if (timer_pending(&target->qp_err_timer))
+ del_timer_sync(&target->qp_err_timer);
+
spin_unlock_irq(target->scsi_host->host_lock);
spin_lock(&target->srp_host->target_lock);
[ ... ]
Calling del_timer_sync() while holding a spinlock can cause locking
inversion. Has this code been tested on a kernel with LOCKDEP enabled
?
Bart.
I have not tested with LOCKDEP enabled., probably del_timer() would be
sufficient inside target_lock
--
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