[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 <yi.zou@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
这个提交包含在:
Yi Zou
2010-11-30 16:19:25 -08:00
提交者 James Bottomley
父节点 d889b30a91
当前提交 ea3e2e72ee

查看文件

@@ -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;
}