diff options
author | Yi Zou <[email protected]> | 2010-11-30 16:19:25 -0800 |
---|---|---|
committer | James Bottomley <[email protected]> | 2010-12-21 12:24:26 -0600 |
commit | ea3e2e72eeb3e8a9440a5da965914f9b12088626 (patch) | |
tree | c997326d053a0247f03fc09b22abe1d78ab3eb56 | |
parent | d889b30a9196c453120ca54323fe80acb4c27b94 (diff) |
[SCSI] libfc: fix exchange being deleted when the abort itself is timed out
Should not continue when the abort itself is being timeout since in that case
the exchange will be deleted and relesased. We still want to call the
associated response handler to let the layer, e.g., fcp, know the exchange
itself is being timed out.
Signed-off-by: Yi Zou <[email protected]>
Signed-off-by: Robert Love <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
-rw-r--r-- | drivers/scsi/libfc/fc_exch.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c index 8bfb421fcdd6..d21367d3305f 100644 --- a/drivers/scsi/libfc/fc_exch.c +++ b/drivers/scsi/libfc/fc_exch.c @@ -650,10 +650,13 @@ static void fc_exch_timeout(struct work_struct *work) if (e_stat & ESB_ST_ABNORMAL) rc = fc_exch_done_locked(ep); spin_unlock_bh(&ep->ex_lock); - if (!rc) - fc_exch_delete(ep); if (resp) resp(sp, ERR_PTR(-FC_EX_TIMEOUT), arg); + if (!rc) { + /* delete the exchange if it's already being aborted */ + fc_exch_delete(ep); + return; + } fc_seq_exch_abort(sp, 2 * ep->r_a_tov); goto done; } |