Commit a46f327a authored by Joe Eykholt's avatar Joe Eykholt Committed by James Bottomley

[SCSI] libfc: change elsct to use FC_ID instead of rdata

tt.elsct_send is used by both FCP and by the rport state machine.
After further patches, these two modules will use different
structures for the remote port.

So, change elsct_send to use the FC_ID instead of the fc_rport_priv
as its argument.  It currently only uses the FC_ID anyway.

For CT requests the destination FC_ID is still implicitly 0xfffffc.
After further patches the did arg on CT requests will be used to
specify the FC_ID being inquired about for GPN_ID or other queries.
Signed-off-by: default avatarJoe Eykholt <jeykholt@cisco.com>
Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 9fb9d328
...@@ -526,7 +526,7 @@ static void fc_disc_gpn_ft_req(struct fc_disc *disc) ...@@ -526,7 +526,7 @@ static void fc_disc_gpn_ft_req(struct fc_disc *disc)
if (!fp) if (!fp)
goto err; goto err;
if (lport->tt.elsct_send(lport, NULL, fp, if (lport->tt.elsct_send(lport, 0, fp,
FC_NS_GPN_FT, FC_NS_GPN_FT,
fc_disc_gpn_ft_resp, fc_disc_gpn_ft_resp,
disc, lport->e_d_tov)) disc, lport->e_d_tov))
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
* fc_elsct_send - sends ELS/CT frame * fc_elsct_send - sends ELS/CT frame
*/ */
static struct fc_seq *fc_elsct_send(struct fc_lport *lport, static struct fc_seq *fc_elsct_send(struct fc_lport *lport,
struct fc_rport_priv *rdata, u32 did,
struct fc_frame *fp, struct fc_frame *fp,
unsigned int op, unsigned int op,
void (*resp)(struct fc_seq *, void (*resp)(struct fc_seq *,
...@@ -41,16 +41,17 @@ static struct fc_seq *fc_elsct_send(struct fc_lport *lport, ...@@ -41,16 +41,17 @@ static struct fc_seq *fc_elsct_send(struct fc_lport *lport,
void *arg, u32 timer_msec) void *arg, u32 timer_msec)
{ {
enum fc_rctl r_ctl; enum fc_rctl r_ctl;
u32 did = FC_FID_NONE;
enum fc_fh_type fh_type; enum fc_fh_type fh_type;
int rc; int rc;
/* ELS requests */ /* ELS requests */
if ((op >= ELS_LS_RJT) && (op <= ELS_AUTH_ELS)) if ((op >= ELS_LS_RJT) && (op <= ELS_AUTH_ELS))
rc = fc_els_fill(lport, rdata, fp, op, &r_ctl, &did, &fh_type); rc = fc_els_fill(lport, did, fp, op, &r_ctl, &fh_type);
else else {
/* CT requests */ /* CT requests */
rc = fc_ct_fill(lport, fp, op, &r_ctl, &did, &fh_type); rc = fc_ct_fill(lport, fp, op, &r_ctl, &fh_type);
did = FC_FID_DIR_SERV;
}
if (rc) if (rc)
return NULL; return NULL;
......
...@@ -1308,7 +1308,7 @@ static void fc_fcp_rec(struct fc_fcp_pkt *fsp) ...@@ -1308,7 +1308,7 @@ static void fc_fcp_rec(struct fc_fcp_pkt *fsp)
fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, rport->port_id, fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, rport->port_id,
fc_host_port_id(rp->local_port->host), FC_TYPE_ELS, fc_host_port_id(rp->local_port->host), FC_TYPE_ELS,
FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
if (lp->tt.elsct_send(lp, rport->dd_data, fp, ELS_REC, fc_fcp_rec_resp, if (lp->tt.elsct_send(lp, rport->port_id, fp, ELS_REC, fc_fcp_rec_resp,
fsp, jiffies_to_msecs(FC_SCSI_REC_TOV))) { fsp, jiffies_to_msecs(FC_SCSI_REC_TOV))) {
fc_fcp_pkt_hold(fsp); /* hold while REC outstanding */ fc_fcp_pkt_hold(fsp); /* hold while REC outstanding */
return; return;
......
...@@ -1217,7 +1217,7 @@ static void fc_lport_enter_scr(struct fc_lport *lport) ...@@ -1217,7 +1217,7 @@ static void fc_lport_enter_scr(struct fc_lport *lport)
return; return;
} }
if (!lport->tt.elsct_send(lport, NULL, fp, ELS_SCR, if (!lport->tt.elsct_send(lport, FC_FID_FCTRL, fp, ELS_SCR,
fc_lport_scr_resp, lport, lport->e_d_tov)) fc_lport_scr_resp, lport, lport->e_d_tov))
fc_lport_error(lport, fp); fc_lport_error(lport, fp);
} }
...@@ -1258,7 +1258,7 @@ static void fc_lport_enter_rft_id(struct fc_lport *lport) ...@@ -1258,7 +1258,7 @@ static void fc_lport_enter_rft_id(struct fc_lport *lport)
return; return;
} }
if (!lport->tt.elsct_send(lport, NULL, fp, FC_NS_RFT_ID, if (!lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RFT_ID,
fc_lport_rft_id_resp, fc_lport_rft_id_resp,
lport, lport->e_d_tov)) lport, lport->e_d_tov))
fc_lport_error(lport, fp); fc_lport_error(lport, fp);
...@@ -1287,7 +1287,7 @@ static void fc_lport_enter_rpn_id(struct fc_lport *lport) ...@@ -1287,7 +1287,7 @@ static void fc_lport_enter_rpn_id(struct fc_lport *lport)
return; return;
} }
if (!lport->tt.elsct_send(lport, NULL, fp, FC_NS_RPN_ID, if (!lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RPN_ID,
fc_lport_rpn_id_resp, fc_lport_rpn_id_resp,
lport, lport->e_d_tov)) lport, lport->e_d_tov))
fc_lport_error(lport, fp); fc_lport_error(lport, fp);
...@@ -1443,8 +1443,8 @@ static void fc_lport_enter_logo(struct fc_lport *lport) ...@@ -1443,8 +1443,8 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
return; return;
} }
if (!lport->tt.elsct_send(lport, NULL, fp, ELS_LOGO, fc_lport_logo_resp, if (!lport->tt.elsct_send(lport, FC_FID_FLOGI, fp, ELS_LOGO,
lport, lport->e_d_tov)) fc_lport_logo_resp, lport, lport->e_d_tov))
fc_lport_error(lport, fp); fc_lport_error(lport, fp);
} }
...@@ -1567,7 +1567,7 @@ void fc_lport_enter_flogi(struct fc_lport *lport) ...@@ -1567,7 +1567,7 @@ void fc_lport_enter_flogi(struct fc_lport *lport)
if (!fp) if (!fp)
return fc_lport_error(lport, fp); return fc_lport_error(lport, fp);
if (!lport->tt.elsct_send(lport, NULL, fp, ELS_FLOGI, if (!lport->tt.elsct_send(lport, FC_FID_FLOGI, fp, ELS_FLOGI,
fc_lport_flogi_resp, lport, lport->e_d_tov)) fc_lport_flogi_resp, lport, lport->e_d_tov))
fc_lport_error(lport, fp); fc_lport_error(lport, fp);
} }
......
...@@ -593,7 +593,7 @@ static void fc_rport_enter_plogi(struct fc_rport_priv *rdata) ...@@ -593,7 +593,7 @@ static void fc_rport_enter_plogi(struct fc_rport_priv *rdata)
} }
rdata->e_d_tov = lport->e_d_tov; rdata->e_d_tov = lport->e_d_tov;
if (!lport->tt.elsct_send(lport, rdata, fp, ELS_PLOGI, if (!lport->tt.elsct_send(lport, rport->port_id, fp, ELS_PLOGI,
fc_rport_plogi_resp, rdata, lport->e_d_tov)) fc_rport_plogi_resp, rdata, lport->e_d_tov))
fc_rport_error_retry(rdata, fp); fc_rport_error_retry(rdata, fp);
else else
...@@ -747,7 +747,7 @@ static void fc_rport_enter_prli(struct fc_rport_priv *rdata) ...@@ -747,7 +747,7 @@ static void fc_rport_enter_prli(struct fc_rport_priv *rdata)
return; return;
} }
if (!lport->tt.elsct_send(lport, rdata, fp, ELS_PRLI, if (!lport->tt.elsct_send(lport, rport->port_id, fp, ELS_PRLI,
fc_rport_prli_resp, rdata, lport->e_d_tov)) fc_rport_prli_resp, rdata, lport->e_d_tov))
fc_rport_error_retry(rdata, fp); fc_rport_error_retry(rdata, fp);
else else
...@@ -845,7 +845,7 @@ static void fc_rport_enter_rtv(struct fc_rport_priv *rdata) ...@@ -845,7 +845,7 @@ static void fc_rport_enter_rtv(struct fc_rport_priv *rdata)
return; return;
} }
if (!lport->tt.elsct_send(lport, rdata, fp, ELS_RTV, if (!lport->tt.elsct_send(lport, rport->port_id, fp, ELS_RTV,
fc_rport_rtv_resp, rdata, lport->e_d_tov)) fc_rport_rtv_resp, rdata, lport->e_d_tov))
fc_rport_error_retry(rdata, fp); fc_rport_error_retry(rdata, fp);
else else
...@@ -876,7 +876,7 @@ static void fc_rport_enter_logo(struct fc_rport_priv *rdata) ...@@ -876,7 +876,7 @@ static void fc_rport_enter_logo(struct fc_rport_priv *rdata)
return; return;
} }
if (!lport->tt.elsct_send(lport, rdata, fp, ELS_LOGO, if (!lport->tt.elsct_send(lport, rport->port_id, fp, ELS_LOGO,
fc_rport_logo_resp, rdata, lport->e_d_tov)) fc_rport_logo_resp, rdata, lport->e_d_tov))
fc_rport_error_retry(rdata, fp); fc_rport_error_retry(rdata, fp);
else else
......
...@@ -79,8 +79,9 @@ static inline struct fc_ct_req *fc_ct_hdr_fill(const struct fc_frame *fp, ...@@ -79,8 +79,9 @@ static inline struct fc_ct_req *fc_ct_hdr_fill(const struct fc_frame *fp,
/** /**
* fc_ct_fill - Fill in a name service request frame * fc_ct_fill - Fill in a name service request frame
*/ */
static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp, static inline int fc_ct_fill(struct fc_lport *lport,
unsigned int op, enum fc_rctl *r_ctl, u32 *did, struct fc_frame *fp,
unsigned int op, enum fc_rctl *r_ctl,
enum fc_fh_type *fh_type) enum fc_fh_type *fh_type)
{ {
struct fc_ct_req *ct; struct fc_ct_req *ct;
...@@ -110,7 +111,6 @@ static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp, ...@@ -110,7 +111,6 @@ static inline int fc_ct_fill(struct fc_lport *lport, struct fc_frame *fp,
return -EINVAL; return -EINVAL;
} }
*r_ctl = FC_RCTL_DD_UNSOL_CTL; *r_ctl = FC_RCTL_DD_UNSOL_CTL;
*did = FC_FID_DIR_SERV;
*fh_type = FC_TYPE_CT; *fh_type = FC_TYPE_CT;
return 0; return 0;
} }
...@@ -250,53 +250,37 @@ static inline void fc_scr_fill(struct fc_lport *lport, struct fc_frame *fp) ...@@ -250,53 +250,37 @@ static inline void fc_scr_fill(struct fc_lport *lport, struct fc_frame *fp)
* fc_els_fill - Fill in an ELS request frame * fc_els_fill - Fill in an ELS request frame
*/ */
static inline int fc_els_fill(struct fc_lport *lport, static inline int fc_els_fill(struct fc_lport *lport,
struct fc_rport_priv *rdata, u32 did,
struct fc_frame *fp, unsigned int op, struct fc_frame *fp, unsigned int op,
enum fc_rctl *r_ctl, u32 *did, enum fc_fh_type *fh_type) enum fc_rctl *r_ctl, enum fc_fh_type *fh_type)
{ {
struct fc_rport *rport = PRIV_TO_RPORT(rdata);
switch (op) { switch (op) {
case ELS_PLOGI: case ELS_PLOGI:
fc_plogi_fill(lport, fp, ELS_PLOGI); fc_plogi_fill(lport, fp, ELS_PLOGI);
*did = rport->port_id;
break; break;
case ELS_FLOGI: case ELS_FLOGI:
fc_flogi_fill(lport, fp); fc_flogi_fill(lport, fp);
*did = FC_FID_FLOGI;
break; break;
case ELS_LOGO: case ELS_LOGO:
fc_logo_fill(lport, fp); fc_logo_fill(lport, fp);
*did = FC_FID_FLOGI;
/*
* if rport is valid then it
* is port logo, therefore
* set did to rport id.
*/
if (rdata)
*did = rport->port_id;
break; break;
case ELS_RTV: case ELS_RTV:
fc_rtv_fill(lport, fp); fc_rtv_fill(lport, fp);
*did = rport->port_id;
break; break;
case ELS_REC: case ELS_REC:
fc_rec_fill(lport, fp); fc_rec_fill(lport, fp);
*did = rport->port_id;
break; break;
case ELS_PRLI: case ELS_PRLI:
fc_prli_fill(lport, fp); fc_prli_fill(lport, fp);
*did = rport->port_id;
break; break;
case ELS_SCR: case ELS_SCR:
fc_scr_fill(lport, fp); fc_scr_fill(lport, fp);
*did = FC_FID_FCTRL;
break; break;
default: default:
......
...@@ -424,7 +424,7 @@ struct libfc_function_template { ...@@ -424,7 +424,7 @@ struct libfc_function_template {
* STATUS: OPTIONAL * STATUS: OPTIONAL
*/ */
struct fc_seq *(*elsct_send)(struct fc_lport *lport, struct fc_seq *(*elsct_send)(struct fc_lport *lport,
struct fc_rport_priv *, u32 did,
struct fc_frame *fp, struct fc_frame *fp,
unsigned int op, unsigned int op,
void (*resp)(struct fc_seq *, void (*resp)(struct fc_seq *,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment