Signed-off-by: Robert Love <[EMAIL PROTECTED]>
---

 drivers/scsi/libfc/fc_lport.c |  270 ++++++++++++++++++++++++++++++-
 drivers/scsi/libfc/fc_ns.c    |  352 -----------------------------------------
 include/scsi/libfc/libfc.h    |    1 
 3 files changed, 260 insertions(+), 363 deletions(-)

diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 8864da9..e5efa0e 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -37,6 +37,10 @@
 static int fc_lport_debug;
 
 static void fc_lport_enter_flogi(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[] = {
@@ -66,7 +70,7 @@ static void fc_lport_rport_event(struct fc_lport *lport, 
struct fc_rport *rport,
                switch (event) {
                case LPORT_EV_RPORT_CREATED:
                        lport->dns_rp = rport;
-                       lport->tt.dns_register(lport);
+                       fc_lport_enter_dns(lport);
                        break;
                case LPORT_EV_RPORT_LOGO:
                case LPORT_EV_RPORT_FAILED:
@@ -139,6 +143,26 @@ void fc_get_host_port_state(struct Scsi_Host *shost)
 EXPORT_SYMBOL(fc_get_host_port_state);
 
 /*
+ * 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;
+}
+
+/*
  * Fill in FLOGI command for request.
  */
 static void
@@ -458,16 +482,24 @@ static void fc_lport_enter_retry(struct fc_lport *lp)
        case LPORT_ST_NONE:
        case LPORT_ST_READY:
        case LPORT_ST_RESET:
-       case LPORT_ST_DNS:
        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_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);
                break;
@@ -489,11 +521,7 @@ static void fc_lport_enter_reject(struct fc_lport *lp)
        case LPORT_ST_SCR:
        case LPORT_ST_DNS_STOP:
        case LPORT_ST_DNS:
-               WARN_ON(1);
-               break;
        case LPORT_ST_FLOGI:
-               fc_lport_enter_flogi(lp);
-               break;
        case LPORT_ST_LOGO:
                fc_lport_enter_reset(lp);
                break;
@@ -732,6 +760,228 @@ static void fc_lport_error(struct fc_lport *lp, struct 
fc_frame *fp)
        fc_lport_unlock(lp);
 }
 
+/*
+ * 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 *lport = lp_arg;
+
+       if (!IS_ERR(fp)) {
+               fc_lport_lock(lport);
+               cancel_delayed_work_sync(&lport->retry_work);
+               if (fc_lport_dns_acc(fp)) {
+                       if (lport->state == LPORT_ST_REG_PN)
+                               fc_lport_enter_reg_ft(lport);
+                       else
+                               fc_lport_enter_scr(lport);
+
+               } else {
+                       fc_lport_retry(lport);
+               }
+               fc_lport_unlock(lport);
+               fc_frame_free(fp);
+       } else
+               fc_lport_error(lport, fp);
+}
+
+/**
+ * fc_lport_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_scr_resp(struct fc_seq *sp, struct fc_frame *fp,
+                             void *lp_arg)
+{
+       struct fc_lport *lport = lp_arg;
+       int err;
+
+       if (IS_ERR(fp))
+               fc_lport_error(lport, fp);
+       else {
+               fc_lport_lock(lport);
+               fc_lport_state_enter(lport, LPORT_ST_READY);
+               fc_lport_unlock(lport);
+               err = lport->tt.disc_start(lport);
+               if (err)
+                       FC_DBG("target discovery start error\n");
+               fc_frame_free(fp);
+       }
+}
+
+/**
+ * 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 *lport)
+{
+       struct fc_frame *fp;
+       struct fc_els_scr *scr;
+
+       if (fc_lport_debug)
+               FC_DBG("Processing SCR state\n");
+
+       fc_lport_state_enter(lport, LPORT_ST_SCR);
+
+       fp = fc_frame_alloc(lport, 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);
+
+       lport->tt.exch_seq_send(lport, fp,
+                               fc_lport_scr_resp,
+                               lport, lport->e_d_tov,
+                               lport->fid, FC_FID_FCTRL,
+                               FC_FC_SEQ_INIT | FC_FC_END_SEQ);
+}
+
+/**
+ * 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 *lport)
+{
+       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\n");
+
+       fc_lport_state_enter(lport, LPORT_ST_REG_FT);
+
+       lps = &lport->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(lport, sizeof(*req));
+               if (fp) {
+                       req = fc_frame_payload_get(fp, sizeof(*req));
+                       fc_fill_dns_hdr(lport, &req->ct,
+                                       FC_NS_RFT_ID,
+                                       sizeof(*req) -
+                                       sizeof(struct fc_ct_hdr));
+                       hton24(req->fid.fp_fid, lport->fid);
+                       req->fts = *lps;
+                       fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
+
+                       if (!lport->tt.exch_seq_send(lport, fp,
+                                                    fc_lport_ns_resp, lport,
+                                                    lport->e_d_tov,
+                                                    lport->fid,
+                                                    FC_FID_DIR_SERV,
+                                                    FC_FC_SEQ_INIT |
+                                                    FC_FC_END_SEQ))
+                               fc_lport_retry(lport);
+               } else {
+                       fc_lport_retry(lport);
+               }
+       } else {
+               fc_lport_enter_scr(lport);
+       }
+}
+
+/*
+ * Register port name with name server.
+ */
+static void fc_lport_enter_reg_pn(struct fc_lport *lport)
+{
+       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\n");
+
+       fc_lport_state_enter(lport, LPORT_ST_REG_PN);
+       fp = fc_frame_alloc(lport, sizeof(*req));
+       if (!fp) {
+               fc_lport_retry(lport);
+               return;
+       }
+       req = fc_frame_payload_get(fp, sizeof(*req));
+       memset(req, 0, sizeof(*req));
+       fc_fill_dns_hdr(lport, &req->ct, FC_NS_RPN_ID, sizeof(req->rn));
+       hton24(req->rn.fr_fid.fp_fid, lport->fid);
+       put_unaligned_be64(lport->wwpn, &req->rn.fr_wwn);
+       fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
+       if (!lport->tt.exch_seq_send(lport, fp,
+                                    fc_lport_ns_resp, lport,
+                                    lport->e_d_tov,
+                                    lport->fid,
+                                    FC_FID_DIR_SERV,
+                                    FC_FC_SEQ_INIT | FC_FC_END_SEQ))
+               fc_lport_retry(lport);
+}
+
+/*
+ * Setup session to dNS if not already set up.
+ */
+static void fc_lport_enter_dns(struct fc_lport *lport)
+{
+       struct fc_rport *rport;
+       struct fc_rport_libfc_priv *rdata;
+       struct fc_ns_port dp;
+       
+       dp.ids.port_id = FC_FID_DIR_SERV;
+       dp.ids.port_name = -1;
+       dp.ids.node_name = -1;
+       dp.ids.roles = FC_RPORT_ROLE_UNKNOWN;
+
+       if (fc_lport_debug)
+               FC_DBG("Processing DNS state\n");
+
+       fc_lport_state_enter(lport, LPORT_ST_DNS);
+
+       if (!lport->dns_rp) {
+               /* Set up a dummy rport to directory server */
+               fc_lport_unlock(lport);
+               rport = fc_rport_dummy_create(&dp);
+               fc_lport_lock(lport);
+               if (!rport)
+                       goto err;
+               lport->dns_rp = rport;
+       }
+
+       rport = lport->dns_rp;
+       rdata = rport->dd_data;
+       rdata->local_port = lport;
+
+       /*
+        * If dNS session isn't ready, start its logon.
+        */
+       if (rdata->rp_state != RPORT_ST_READY) {
+               rdata->event_callback = fc_lport_rport_event;
+               lport->tt.rport_login(rport);
+       } else {
+               cancel_delayed_work_sync(&lport->retry_work);
+               fc_lport_enter_reg_pn(lport);
+       }
+       return;
+
+       /*
+        * Resource allocation problem (malloc).  Try again in 500 mS.
+        */
+err:
+       fc_lport_retry(lport);
+}
+
 static void fc_lport_timeout(struct work_struct *work)
 {
        struct fc_lport *lport =
@@ -859,7 +1109,7 @@ fc_lport_flogi_resp(struct fc_seq *sp, struct fc_frame 
*fp, void *lp_arg)
                        } else {
                                lp->e_d_tov = e_d_tov;
                                lp->r_a_tov = r_a_tov;
-                               lp->tt.dns_register(lp);
+                               fc_lport_enter_dns(lp);
                        }
                }
                fc_lport_unlock(lp);
diff --git a/drivers/scsi/libfc/fc_ns.c b/drivers/scsi/libfc/fc_ns.c
index 1bba2f1..4221e96 100644
--- a/drivers/scsi/libfc/fc_ns.c
+++ b/drivers/scsi/libfc/fc_ns.c
@@ -43,11 +43,6 @@ static void fc_ns_del_target(struct fc_lport *, struct 
fc_rport *);
 static void fc_ns_disc_done(struct fc_lport *);
 static void fcdt_ns_error(struct fc_lport *, struct fc_frame *);
 static void fc_ns_timeout(struct work_struct *);
-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_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 *);
 
@@ -153,172 +148,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\n");
-
-       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\n");
-
-       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_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,
-                                                 FC_FID_DIR_SERV,
-                                                 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:
-               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;
-       case LPORT_ST_DNS:
-               lp->tt.lport_reset(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:
-               WARN_ON(1);
-               break;
-       case LPORT_ST_DNS:
-               lp->tt.dns_register(lp);
-               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.
@@ -436,51 +265,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++;
-               schedule_delayed_work(&lp->retry_work,
-                                     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\n",
-                      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.
  */
@@ -498,52 +282,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);
-               cancel_delayed_work_sync(&lp->retry_work);
-               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.
@@ -890,58 +628,6 @@ out:
 }
 
 /*
- * Setup session to dNS if not already set up.
- */
-static void fc_ns_enter_dns(struct fc_lport *lp)
-{
-       struct fc_rport *rport;
-       struct fc_rport_libfc_priv *rp;
-       struct fc_ns_port dp;
-
-       dp.ids.port_id = FC_FID_DIR_SERV;
-       dp.ids.port_name = -1;
-       dp.ids.node_name = -1;
-       dp.ids.roles = FC_RPORT_ROLE_UNKNOWN;
-
-       if (fc_ns_debug)
-               FC_DBG("Processing DNS state\n");
-
-       fc_lport_state_enter(lp, LPORT_ST_DNS);
-
-       if (!lp->dns_rp) {
-               /* Set up a dummy rport to directory server */
-               fc_lport_unlock(lp);
-               rport = fc_rport_dummy_create(&dp);
-               fc_lport_lock(lp);
-               if (!rport)
-                       goto err;
-               lp->dns_rp = rport;
-       }
-
-       rport = lp->dns_rp;
-       rp = rport->dd_data;
-       rp->local_port = lp;
-
-       /*
-        * If dNS session isn't ready, start its logon.
-        */
-       if (rp->rp_state != RPORT_ST_READY) {
-               rp->event_callback = lp->tt.event_callback;
-               lp->tt.rport_login(rport);
-       } else {
-               cancel_delayed_work_sync(&lp->retry_work);
-               fc_ns_enter_reg_pn(lp);
-       }
-       return;
-
-       /*
-        * Resource allocation problem (malloc).  Try again in 500 mS.
-        */
-err:
-       fc_ns_retry(lp);
-}
-
-/*
  * Logoff DNS session.
  * We should get an event call when the session has been logged out.
  */
@@ -960,41 +646,6 @@ static void fc_ns_enter_dns_stop(struct fc_lport *lp)
                lp->tt.lport_logout(lp);
 }
 
-/*
- * 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\n");
-
-       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_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,
-                                 FC_FID_DIR_SERV,
-                                 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);
@@ -1005,9 +656,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_dns;
-
        if (!lp->tt.disc_stop)
                lp->tt.disc_stop = fc_ns_enter_dns_stop;
 
diff --git a/include/scsi/libfc/libfc.h b/include/scsi/libfc/libfc.h
index f86b440..68ac8af 100644
--- a/include/scsi/libfc/libfc.h
+++ b/include/scsi/libfc/libfc.h
@@ -409,7 +409,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

Reply via email to