Moving fc_ns_enter_reg_pn, fc_ns_enter_reg_ft and
fc_ns_enter_scr to fc_lport.c. This also removes
fc_ns_retry and fc_ns_error from fc_ns.c.
This is part of an initiative to move all of the lport's
state transitions back into the lport block.
Signed-off-by: Robert Love <[EMAIL PROTECTED]>
---
drivers/scsi/libfc/fc_lport.c | 252 +++++++++++++++++++++++++++++++--
drivers/scsi/libfc/fc_ns.c | 311 -----------------------------------------
drivers/scsi/libfc/fc_rport.c | 22 ++-
include/scsi/libfc/libfc.h | 1
4 files changed, 247 insertions(+), 339 deletions(-)
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 113a4df..5e3a0e5 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -37,8 +37,12 @@
static int fc_lport_debug;
static void fc_lport_enter_flogi(struct fc_lport *);
-static void fc_lport_enter_logo(struct fc_lport *);
static void fc_lport_enter_dns(struct fc_lport *);
+static void fc_lport_enter_reg_pn(struct fc_lport *);
+static void fc_lport_enter_reg_ft(struct fc_lport *);
+static void fc_lport_enter_scr(struct fc_lport *);
+
+static void fc_lport_enter_logo(struct fc_lport *);
static const char *fc_lport_state_names[] = {
[LPORT_ST_NONE] = "none",
@@ -62,9 +66,8 @@ static int fc_frame_drop(struct fc_lport *lp, struct fc_frame
*fp)
static int fc_lport_event_callback(struct fc_lport *lp, struct fc_rport *rp,
enum fc_lport_event event)
{
- if (rp == lp->dns_rp && event == LPORT_EV_RPORT_SUCCESS) {
- lp->tt.dns_register(lp);
- }
+ if (rp == lp->dns_rp && event == LPORT_EV_RPORT_SUCCESS)
+ fc_lport_enter_reg_pn(lp);
return 0;
}
@@ -116,11 +119,23 @@ static void fc_lport_ptp_clear(struct fc_lport *lp)
}
/*
+ * Fill in dNS request header.
+ */
+static void fc_lport_fill_dns_hdr(struct fc_lport *lp, struct fc_ct_hdr *ct,
+ unsigned int op, unsigned int req_size)
+{
+ memset(ct, 0, sizeof(*ct) + req_size);
+ ct->ct_rev = FC_CT_REV;
+ ct->ct_fs_type = FC_FST_DIR;
+ ct->ct_fs_subtype = FC_NS_SUBTYPE;
+ ct->ct_cmd = htons(op);
+}
+
+/*
* Fill in FLOGI command for request.
*/
-static void
-fc_lport_flogi_fill(struct fc_lport *lp,
- struct fc_els_flogi *flogi, unsigned int op)
+static void fc_lport_flogi_fill(struct fc_lport *lp,
+ struct fc_els_flogi *flogi, unsigned int op)
{
struct fc_els_csp *sp;
struct fc_els_cssp *cp;
@@ -436,16 +451,22 @@ static void fc_lport_enter_retry(struct fc_lport *lp)
case LPORT_ST_READY:
case LPORT_ST_RESET:
case LPORT_ST_DNS_STOP:
- case LPORT_ST_REG_PN:
- case LPORT_ST_REG_FT:
- case LPORT_ST_SCR:
WARN_ON(1);
break;
+ case LPORT_ST_FLOGI:
+ fc_lport_enter_flogi(lp);
+ break;
case LPORT_ST_DNS:
fc_lport_enter_dns(lp);
break;
- case LPORT_ST_FLOGI:
- fc_lport_enter_flogi(lp);
+ case LPORT_ST_REG_PN:
+ fc_lport_enter_reg_pn(lp);
+ break;
+ case LPORT_ST_REG_FT:
+ fc_lport_enter_reg_ft(lp);
+ break;
+ case LPORT_ST_SCR:
+ fc_lport_enter_scr(lp);
break;
case LPORT_ST_LOGO:
fc_lport_enter_logo(lp);
@@ -463,17 +484,23 @@ static void fc_lport_enter_reject(struct fc_lport *lp)
case LPORT_ST_NONE:
case LPORT_ST_READY:
case LPORT_ST_RESET:
- case LPORT_ST_REG_PN:
- case LPORT_ST_REG_FT:
- case LPORT_ST_SCR:
case LPORT_ST_DNS_STOP:
WARN_ON(1);
break;
+ case LPORT_ST_FLOGI:
+ fc_lport_enter_flogi(lp);
+ break;
case LPORT_ST_DNS:
lp->tt.lport_reset(lp);
break;
- case LPORT_ST_FLOGI:
- fc_lport_enter_flogi(lp);
+ case LPORT_ST_REG_PN:
+ fc_lport_enter_reg_ft(lp);
+ break;
+ case LPORT_ST_REG_FT:
+ fc_lport_enter_scr(lp);
+ break;
+ case LPORT_ST_SCR:
+ lp->tt.disc_stop(lp);
break;
case LPORT_ST_LOGO:
fc_lport_enter_reset(lp);
@@ -546,7 +573,7 @@ static void fc_lport_enter_dns(struct fc_lport *lp)
lp->tt.rport_login(rport);
} else {
del_timer(&lp->state_timer);
- lp->tt.dns_register(lp);
+ fc_lport_enter_reg_pn(lp);
}
return;
@@ -947,6 +974,195 @@ void fc_lport_enter_flogi(struct fc_lport *lp)
fc_lport_flogi_send(lp);
}
+/*
+ * Test for dNS accept in response payload.
+ */
+static int fc_lport_dns_acc(struct fc_frame *fp)
+{
+ struct fc_frame_header *fh;
+ struct fc_ct_hdr *ct;
+ int rc = 0;
+
+ fh = fc_frame_header_get(fp);
+ ct = fc_frame_payload_get(fp, sizeof(*ct));
+ if (fh && ct && fh->fh_type == FC_TYPE_CT &&
+ ct->ct_fs_type == FC_FST_DIR &&
+ ct->ct_fs_subtype == FC_NS_SUBTYPE &&
+ ntohs(ct->ct_cmd) == FC_FS_ACC) {
+ rc = 1;
+ }
+ return rc;
+}
+
+/*
+ * Handle response from name server.
+ */
+static void fc_lport_ns_resp(struct fc_seq *sp, struct fc_frame *fp,
+ void *lp_arg)
+{
+ struct fc_lport *lp = lp_arg;
+
+ if (!IS_ERR(fp)) {
+ fc_lport_lock(lp);
+ del_timer(&lp->state_timer);
+ if (fc_lport_dns_acc(fp)) {
+ if (lp->state == LPORT_ST_REG_PN)
+ fc_lport_enter_reg_ft(lp);
+ else
+ fc_lport_enter_scr(lp);
+
+ } else {
+ fc_lport_retry(lp);
+ }
+ fc_lport_unlock(lp);
+ fc_frame_free(fp);
+ } else
+ fc_lport_error(lp, fp);
+}
+
+/**
+ * fc_lport_ns_scr_resp - Handle response to State Change Register (SCR)
request
+ * @sp: current sequence in SCR exchange
+ * @fp: response frame
+ * @lp_arg: Fibre Channel host port instance
+ */
+static void fc_lport_ns_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
+ void *lp_arg)
+{
+ struct fc_lport *lp = lp_arg;
+ int err;
+
+ if (IS_ERR(fp))
+ fc_lport_error(lp, fp);
+ else {
+ fc_lport_lock(lp);
+ fc_lport_state_enter(lp, LPORT_ST_READY);
+ fc_lport_unlock(lp);
+ err = lp->tt.disc_start(lp);
+ if (err)
+ FC_DBG("target discovery start error\n");
+ fc_frame_free(fp);
+ }
+}
+
+/*
+ * Register port name with name server.
+ */
+static void fc_lport_enter_reg_pn(struct fc_lport *lp)
+{
+ struct fc_frame *fp;
+ struct req {
+ struct fc_ct_hdr ct;
+ struct fc_ns_rn_id rn;
+ } *req;
+
+ if (fc_lport_debug)
+ FC_DBG("Processing REG_PN state");
+
+ fc_lport_state_enter(lp, LPORT_ST_REG_PN);
+ fp = fc_frame_alloc(lp, sizeof(*req));
+ if (!fp) {
+ fc_lport_retry(lp);
+ return;
+ }
+ req = fc_frame_payload_get(fp, sizeof(*req));
+ memset(req, 0, sizeof(*req));
+ fc_lport_fill_dns_hdr(lp, &req->ct, FC_NS_RPN_ID, sizeof(req->rn));
+ hton24(req->rn.fr_fid.fp_fid, lp->fid);
+ put_unaligned_be64(lp->wwpn, &req->rn.fr_wwn);
+ fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
+ if (!lp->tt.exch_seq_send(lp, fp,
+ fc_lport_ns_resp, lp,
+ lp->e_d_tov,
+ lp->fid,
+ lp->dns_rp->port_id,
+ FC_FC_SEQ_INIT | FC_FC_END_SEQ))
+ fc_lport_retry(lp);
+}
+
+/**
+ * fc_lport_enter_reg_ft - Register FC4-types with the name server
+ * @lp: Fibre Channel host port instance
+ */
+static void fc_lport_enter_reg_ft(struct fc_lport *lp)
+{
+ struct fc_frame *fp;
+ struct req {
+ struct fc_ct_hdr ct;
+ struct fc_ns_fid fid; /* port ID object */
+ struct fc_ns_fts fts; /* FC4-types object */
+ } *req;
+ struct fc_ns_fts *lps;
+ int i;
+
+ if (fc_lport_debug)
+ FC_DBG("Processing REG_FT state");
+
+ fc_lport_state_enter(lp, LPORT_ST_REG_FT);
+
+ lps = &lp->fcts;
+ i = sizeof(lps->ff_type_map) / sizeof(lps->ff_type_map[0]);
+ while (--i >= 0)
+ if (ntohl(lps->ff_type_map[i]) != 0)
+ break;
+ if (i >= 0) {
+ fp = fc_frame_alloc(lp, sizeof(*req));
+ if (fp) {
+ req = fc_frame_payload_get(fp, sizeof(*req));
+ fc_lport_fill_dns_hdr(lp, &req->ct,
+ FC_NS_RFT_ID,
+ sizeof(*req) -
+ sizeof(struct fc_ct_hdr));
+ hton24(req->fid.fp_fid, lp->fid);
+ req->fts = *lps;
+ fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
+ if (!lp->tt.exch_seq_send(lp, fp,
+ fc_lport_ns_resp, lp,
+ lp->e_d_tov,
+ lp->fid,
+ lp->dns_rp->port_id,
+ FC_FC_SEQ_INIT |
+ FC_FC_END_SEQ))
+ fc_lport_retry(lp);
+ } else {
+ fc_lport_retry(lp);
+ }
+ } else {
+ fc_lport_enter_scr(lp);
+ }
+}
+
+/**
+ * fc_lport_enter scr - Send a State Change Register (SCR) request
+ * @lp: Fibre Channel host port instance
+ */
+static void fc_lport_enter_scr(struct fc_lport *lp)
+{
+ struct fc_frame *fp;
+ struct fc_els_scr *scr;
+
+ if (fc_lport_debug)
+ FC_DBG("Processing SCR state");
+
+ fc_lport_state_enter(lp, LPORT_ST_SCR);
+
+ fp = fc_frame_alloc(lp, sizeof(*scr));
+ if (fp) {
+ scr = fc_frame_payload_get(fp, sizeof(*scr));
+ memset(scr, 0, sizeof(*scr));
+ scr->scr_cmd = ELS_SCR;
+ scr->scr_reg_func = ELS_SCRF_FULL;
+ }
+ fc_frame_setup(fp, FC_RCTL_ELS_REQ, FC_TYPE_ELS);
+ fc_frame_set_offset(fp, 0);
+
+ lp->tt.exch_seq_send(lp, fp,
+ fc_lport_ns_scr_resp,
+ lp, lp->e_d_tov,
+ lp->fid, FC_FID_FCTRL,
+ FC_FC_SEQ_INIT | FC_FC_END_SEQ);
+}
+
/* Configure a fc_lport */
int fc_lport_config(struct fc_lport *lp)
{
diff --git a/drivers/scsi/libfc/fc_ns.c b/drivers/scsi/libfc/fc_ns.c
index 4edf561..32ac764 100644
--- a/drivers/scsi/libfc/fc_ns.c
+++ b/drivers/scsi/libfc/fc_ns.c
@@ -51,13 +51,6 @@ static void fc_ns_gpn_id_error(struct fc_ns_port *rp, struct
fc_frame *fp);
static void fc_ns_gnn_id_req(struct work_struct *work);
static void fc_ns_gnn_id_resp(struct fc_seq *, struct fc_frame *, void *);
static void fc_ns_gnn_id_error(struct fc_ns_port *, struct fc_frame *);
-static void fc_ns_enter_reg_pn(struct fc_lport *lp);
-static void fc_ns_error(struct fc_lport *lp, struct fc_frame *fp);
-static void fc_lport_fill_dns_hdr(struct fc_lport *lp, struct fc_ct_hdr *ct,
- unsigned int op, unsigned int req_size);
-static void fc_ns_resp(struct fc_seq *sp, struct fc_frame *fp,
- void *lp_arg);
-static void fc_ns_retry(struct fc_lport *lp);
static void fc_ns_single(struct fc_lport *, struct fc_ns_port *);
static int fc_ns_restart(struct fc_lport *);
@@ -164,168 +157,6 @@ static void fc_ns_recv_req(struct fc_seq *sp, struct
fc_frame *fp,
}
}
-/**
- * fc_ns_scr_resp - Handle response to State Change Register (SCR) request
- * @sp: current sequence in SCR exchange
- * @fp: response frame
- * @lp_arg: Fibre Channel host port instance
- */
-static void fc_ns_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
- void *lp_arg)
-{
- struct fc_lport *lp = lp_arg;
- int err;
-
- if (IS_ERR(fp))
- fc_ns_error(lp, fp);
- else {
- fc_lport_lock(lp);
- fc_lport_state_enter(lp, LPORT_ST_READY);
- fc_lport_unlock(lp);
- err = lp->tt.disc_start(lp);
- if (err)
- FC_DBG("target discovery start error\n");
- fc_frame_free(fp);
- }
-}
-
-/**
- * fc_ns_enter scr - Send a State Change Register (SCR) request
- * @lp: Fibre Channel host port instance
- */
-static void fc_ns_enter_scr(struct fc_lport *lp)
-{
- struct fc_frame *fp;
- struct fc_els_scr *scr;
-
- if (fc_ns_debug)
- FC_DBG("Processing SCR state");
-
- fc_lport_state_enter(lp, LPORT_ST_SCR);
-
- fp = fc_frame_alloc(lp, sizeof(*scr));
- if (fp) {
- scr = fc_frame_payload_get(fp, sizeof(*scr));
- memset(scr, 0, sizeof(*scr));
- scr->scr_cmd = ELS_SCR;
- scr->scr_reg_func = ELS_SCRF_FULL;
- }
- fc_frame_setup(fp, FC_RCTL_ELS_REQ, FC_TYPE_ELS);
- fc_frame_set_offset(fp, 0);
-
- lp->tt.exch_seq_send(lp, fp,
- fc_ns_scr_resp,
- lp, lp->e_d_tov,
- lp->fid, FC_FID_FCTRL,
- FC_FC_SEQ_INIT | FC_FC_END_SEQ);
-}
-
-/**
- * fc_ns_enter_reg_ft - Register FC4-types with the name server
- * @lp: Fibre Channel host port instance
- */
-static void fc_ns_enter_reg_ft(struct fc_lport *lp)
-{
- struct fc_frame *fp;
- struct req {
- struct fc_ct_hdr ct;
- struct fc_ns_fid fid; /* port ID object */
- struct fc_ns_fts fts; /* FC4-types object */
- } *req;
- struct fc_ns_fts *lps;
- int i;
-
- if (fc_ns_debug)
- FC_DBG("Processing REG_FT state");
-
- fc_lport_state_enter(lp, LPORT_ST_REG_FT);
-
- lps = &lp->fcts;
- i = sizeof(lps->ff_type_map) / sizeof(lps->ff_type_map[0]);
- while (--i >= 0)
- if (ntohl(lps->ff_type_map[i]) != 0)
- break;
- if (i >= 0) {
- fp = fc_frame_alloc(lp, sizeof(*req));
- if (fp) {
- req = fc_frame_payload_get(fp, sizeof(*req));
- fc_lport_fill_dns_hdr(lp, &req->ct,
- FC_NS_RFT_ID,
- sizeof(*req) -
- sizeof(struct fc_ct_hdr));
- hton24(req->fid.fp_fid, lp->fid);
- req->fts = *lps;
- fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
- if (!lp->tt.exch_seq_send(lp, fp,
- fc_ns_resp, lp,
- lp->e_d_tov,
- lp->fid,
- lp->dns_rp->port_id,
- FC_FC_SEQ_INIT |
- FC_FC_END_SEQ))
- fc_ns_retry(lp);
- } else {
- fc_ns_retry(lp);
- }
- } else {
- fc_ns_enter_scr(lp);
- }
-}
-
-/*
- * enter next state for handling an exchange reject or retry exhaustion
- * in the current state.
- */
-static void fc_ns_enter_reject(struct fc_lport *lp)
-{
- switch (lp->state) {
- case LPORT_ST_NONE:
- case LPORT_ST_READY:
- case LPORT_ST_RESET:
- case LPORT_ST_FLOGI:
- case LPORT_ST_LOGO:
- case LPORT_ST_DNS:
- WARN_ON(1);
- break;
- case LPORT_ST_REG_PN:
- fc_ns_enter_reg_ft(lp);
- break;
- case LPORT_ST_REG_FT:
- fc_ns_enter_scr(lp);
- break;
- case LPORT_ST_SCR:
- case LPORT_ST_DNS_STOP:
- lp->tt.disc_stop(lp);
- break;
- }
-}
-
-static void fc_ns_enter_retry(struct fc_lport *lp)
-{
- switch (lp->state) {
- case LPORT_ST_NONE:
- case LPORT_ST_RESET:
- case LPORT_ST_READY:
- case LPORT_ST_FLOGI:
- case LPORT_ST_LOGO:
- case LPORT_ST_DNS:
- WARN_ON(1);
- break;
- case LPORT_ST_DNS_STOP:
- lp->tt.disc_stop(lp);
- break;
- case LPORT_ST_REG_PN:
- fc_ns_enter_reg_pn(lp);
- break;
- case LPORT_ST_REG_FT:
- fc_ns_enter_reg_ft(lp);
- break;
- case LPORT_ST_SCR:
- fc_ns_enter_scr(lp);
- break;
- }
-}
-
/*
* Refresh target discovery, perhaps due to an RSCN.
* A configurable delay is introduced to collect any subsequent RSCNs.
@@ -444,50 +275,6 @@ int fc_ns_disc_start(struct fc_lport *lp)
}
/*
- * Handle resource allocation problem by retrying in a bit.
- */
-static void fc_ns_retry(struct fc_lport *lp)
-{
- if (lp->retry_count == 0)
- FC_DBG("local port %6x alloc failure "
- "- will retry\n", lp->fid);
- if (lp->retry_count < lp->max_retry_count) {
- lp->retry_count++;
- mod_timer(&lp->state_timer,
- jiffies + msecs_to_jiffies(lp->e_d_tov));
- } else {
- FC_DBG("local port %6x alloc failure "
- "- retries exhausted\n", lp->fid);
- fc_ns_enter_reject(lp);
- }
-}
-
-/*
- * Handle errors on local port requests.
- * Don't get locks if in RESET state.
- * The only possible errors so far are exchange TIMEOUT and CLOSED (reset).
- */
-static void fc_ns_error(struct fc_lport *lp, struct fc_frame *fp)
-{
- if (lp->state == LPORT_ST_RESET)
- return;
-
- fc_lport_lock(lp);
- if (PTR_ERR(fp) == -FC_EX_TIMEOUT) {
- if (lp->retry_count < lp->max_retry_count) {
- lp->retry_count++;
- fc_ns_enter_retry(lp);
- } else {
- fc_ns_enter_reject(lp);
- }
- }
- if (fc_ns_debug)
- FC_DBG("error %ld retries %d limit %d",
- PTR_ERR(fp), lp->retry_count, lp->max_retry_count);
- fc_lport_unlock(lp);
-}
-
-/*
* Restart discovery after a delay due to resource shortages.
* If the error persists, the discovery will be abandoned.
*/
@@ -506,52 +293,6 @@ static void fcdt_ns_retry(struct fc_lport *lp)
}
/*
- * Test for dNS accept in response payload.
- */
-static int fc_lport_dns_acc(struct fc_frame *fp)
-{
- struct fc_frame_header *fh;
- struct fc_ct_hdr *ct;
- int rc = 0;
-
- fh = fc_frame_header_get(fp);
- ct = fc_frame_payload_get(fp, sizeof(*ct));
- if (fh && ct && fh->fh_type == FC_TYPE_CT &&
- ct->ct_fs_type == FC_FST_DIR &&
- ct->ct_fs_subtype == FC_NS_SUBTYPE &&
- ntohs(ct->ct_cmd) == FC_FS_ACC) {
- rc = 1;
- }
- return rc;
-}
-
-/*
- * Handle response from name server.
- */
-static void
-fc_ns_resp(struct fc_seq *sp, struct fc_frame *fp, void *lp_arg)
-{
- struct fc_lport *lp = lp_arg;
-
- if (!IS_ERR(fp)) {
- fc_lport_lock(lp);
- del_timer(&lp->state_timer);
- if (fc_lport_dns_acc(fp)) {
- if (lp->state == LPORT_ST_REG_PN)
- fc_ns_enter_reg_ft(lp);
- else
- fc_ns_enter_scr(lp);
-
- } else {
- fc_ns_retry(lp);
- }
- fc_lport_unlock(lp);
- fc_frame_free(fp);
- } else
- fc_ns_error(lp, fp);
-}
-
-/*
* Handle new target found by discovery.
* Create remote port and session if needed.
* Ignore returns of our own FID & WWPN.
@@ -1033,55 +774,6 @@ static void fc_ns_enter_dns_stop(struct fc_lport *lp)
lp->tt.lport_logout(lp);
}
-/*
- * Fill in dNS request header.
- */
-static void
-fc_lport_fill_dns_hdr(struct fc_lport *lp, struct fc_ct_hdr *ct,
- unsigned int op, unsigned int req_size)
-{
- memset(ct, 0, sizeof(*ct) + req_size);
- ct->ct_rev = FC_CT_REV;
- ct->ct_fs_type = FC_FST_DIR;
- ct->ct_fs_subtype = FC_NS_SUBTYPE;
- ct->ct_cmd = htons(op);
-}
-
-/*
- * Register port name with name server.
- */
-static void fc_ns_enter_reg_pn(struct fc_lport *lp)
-{
- struct fc_frame *fp;
- struct req {
- struct fc_ct_hdr ct;
- struct fc_ns_rn_id rn;
- } *req;
-
- if (fc_ns_debug)
- FC_DBG("Processing REG_PN state");
-
- fc_lport_state_enter(lp, LPORT_ST_REG_PN);
- fp = fc_frame_alloc(lp, sizeof(*req));
- if (!fp) {
- fc_ns_retry(lp);
- return;
- }
- req = fc_frame_payload_get(fp, sizeof(*req));
- memset(req, 0, sizeof(*req));
- fc_lport_fill_dns_hdr(lp, &req->ct, FC_NS_RPN_ID, sizeof(req->rn));
- hton24(req->rn.fr_fid.fp_fid, lp->fid);
- put_unaligned_be64(lp->wwpn, &req->rn.fr_wwn);
- fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
- if (!lp->tt.exch_seq_send(lp, fp,
- fc_ns_resp, lp,
- lp->e_d_tov,
- lp->fid,
- lp->dns_rp->port_id,
- FC_FC_SEQ_INIT | FC_FC_END_SEQ))
- fc_ns_retry(lp);
-}
-
int fc_ns_init(struct fc_lport *lp)
{
INIT_DELAYED_WORK(&lp->ns_disc_work, fc_ns_timeout);
@@ -1092,9 +784,6 @@ int fc_ns_init(struct fc_lport *lp)
if (!lp->tt.disc_recv_req)
lp->tt.disc_recv_req = fc_ns_recv_req;
- if (!lp->tt.dns_register)
- lp->tt.dns_register = fc_ns_enter_reg_pn;
-
if (!lp->tt.disc_stop)
lp->tt.disc_stop = fc_ns_enter_dns_stop;
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 7666d40..0d4550f 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -371,14 +371,18 @@ static void fc_rport_reject(struct fc_rport *rport)
}
break;
case RPORT_ST_RTV:
+ /*
+ * XXX- Does this case mean that the RTV failed, but
+ * we enter READY anyway?
+ */
fc_rport_state_enter(rport, RPORT_ST_READY);
if (fc_rp_debug)
FC_DBG("remote %6x ready", rport->port_id);
- if (rport == lp->dns_rp &&
- lp->state == LPORT_ST_DNS) {
+
+ if (rport->port_id >= FC_FID_DOM_MGR) {
fc_lport_lock(lp);
del_timer(&lp->state_timer);
- lp->tt.dns_register(lp);
+ lp->tt.lport_event_callback(lp, rport,
LPORT_EV_RPORT_SUCCESS);
fc_lport_unlock(lp);
}
break;
@@ -795,11 +799,11 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct
fc_frame *fp,
fc_rport_unlock(rport);
if (fc_rp_debug)
FC_DBG("remote %6x ready", rport->port_id);
- if (rport == lp->dns_rp &&
- lp->state == LPORT_ST_DNS) {
+
+ if (rport->port_id >= FC_FID_DOM_MGR) {
fc_lport_lock(lp);
del_timer(&lp->state_timer);
- lp->tt.dns_register(lp);
+ lp->tt.lport_event_callback(lp, rport, LPORT_EV_RPORT_SUCCESS);
fc_lport_unlock(lp);
}
fc_frame_free(fp);
@@ -1192,11 +1196,11 @@ static void fc_rport_recv_prli_req(struct fc_rport
*rport,
fc_rport_state_enter(rport, RPORT_ST_READY);
if (fc_rp_debug)
FC_DBG("remote %6x ready", rport->port_id);
- if (rport == lp->dns_rp &&
- lp->state == LPORT_ST_DNS) {
+
+ if (rport->port_id >= FC_FID_DOM_MGR) {
fc_lport_lock(lp);
del_timer(&lp->state_timer);
- lp->tt.dns_register(lp);
+ lp->tt.lport_event_callback(lp, rport,
LPORT_EV_RPORT_SUCCESS);
fc_lport_unlock(lp);
}
break;
diff --git a/include/scsi/libfc/libfc.h b/include/scsi/libfc/libfc.h
index 607a7f4..06553cd 100644
--- a/include/scsi/libfc/libfc.h
+++ b/include/scsi/libfc/libfc.h
@@ -394,7 +394,6 @@ struct libfc_function_template {
*/
int (*disc_start)(struct fc_lport *);
- void (*dns_register)(struct fc_lport *);
void (*disc_stop)(struct fc_lport *);
};
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel