|
@@ -1137,8 +1137,11 @@ static int fc_fcp_pkt_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp)
|
|
|
static inline unsigned int get_fsp_rec_tov(struct fc_fcp_pkt *fsp)
|
|
|
{
|
|
|
struct fc_rport_libfc_priv *rpriv = fsp->rport->dd_data;
|
|
|
+ unsigned int e_d_tov = FC_DEF_E_D_TOV;
|
|
|
|
|
|
- return msecs_to_jiffies(rpriv->e_d_tov) + HZ;
|
|
|
+ if (rpriv && rpriv->e_d_tov > e_d_tov)
|
|
|
+ e_d_tov = rpriv->e_d_tov;
|
|
|
+ return msecs_to_jiffies(e_d_tov) + HZ;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1693,7 +1696,6 @@ static void fc_fcp_srr(struct fc_fcp_pkt *fsp, enum fc_rctl r_ctl, u32 offset)
|
|
|
struct fc_seq *seq;
|
|
|
struct fcp_srr *srr;
|
|
|
struct fc_frame *fp;
|
|
|
- unsigned int rec_tov;
|
|
|
|
|
|
rport = fsp->rport;
|
|
|
rpriv = rport->dd_data;
|
|
@@ -1717,10 +1719,9 @@ static void fc_fcp_srr(struct fc_fcp_pkt *fsp, enum fc_rctl r_ctl, u32 offset)
|
|
|
rpriv->local_port->port_id, FC_TYPE_FCP,
|
|
|
FC_FCTL_REQ, 0);
|
|
|
|
|
|
- rec_tov = get_fsp_rec_tov(fsp);
|
|
|
seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp,
|
|
|
fc_fcp_pkt_destroy,
|
|
|
- fsp, jiffies_to_msecs(rec_tov));
|
|
|
+ fsp, get_fsp_rec_tov(fsp));
|
|
|
if (!seq)
|
|
|
goto retry;
|
|
|
|