/* fc_fcp_srr_error() - Handler for SRR errors @fsp: The FCP packet that the SRR error is on @fp: The SRR frame  */
static void fc_fcp_srr_error(struct fc_fcp_pkt *, struct fc_frame *)
/* fc_fcp_srr_error() - Handler for SRR errors @fsp: The FCP packet that the SRR error is on @fp: The SRR frame  */
static void fc_fcp_srr_error(struct fc_fcp_pkt *, struct fc_frame *)
{
	if (fc_fcp_lock_pkt(fsp))
		goto out;
	fsp->lp->tt.exch_done(fsp->recov_seq);
	fsp->recov_seq = NULL;
	switch (PTR_ERR(fp)) {
	case -FC_EX_TIMEOUT:
		if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY)
			fc_fcp_rec(fsp);
		else
			fc_timeout_error(fsp);
		break;
	case -FC_EX_CLOSED:
	default:
		fc_fcp_retry_cmd(fsp);
		break;
	}
	fc_fcp_unlock_pkt(fsp);
out:
	fc_fcp_pkt_release(fsp);
}