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

 drivers/scsi/libfc/fc_rport.c |   66 ++++++++++++++++-------------------------
 1 files changed, 25 insertions(+), 41 deletions(-)

diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 6d0c970..c7360db 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -43,6 +43,7 @@ static void fc_rport_enter_start(struct fc_rport *);
 static void fc_rport_enter_plogi(struct fc_rport *);
 static void fc_rport_enter_prli(struct fc_rport *);
 static void fc_rport_enter_rtv(struct fc_rport *);
+static void fc_rport_enter_ready(struct fc_rport *);
 static void fc_rport_enter_logo(struct fc_rport *);
 static void fc_rport_recv_plogi_req(struct fc_rport *,
                                    struct fc_seq *, struct fc_frame *);
@@ -329,6 +330,25 @@ void fc_rport_reset_list(struct fc_lport *lp)
        spin_unlock_irqrestore(shost->host_lock, flags);
 }
 
+static void fc_rport_enter_ready(struct fc_rport *rport)
+{
+       struct fc_rport_libfc_priv *rdata = rport->dd_data;
+       struct fc_lport *lport = rdata->local_port;
+
+       fc_rport_state_enter(rport, RPORT_ST_READY);
+
+       if (fc_rp_debug)
+               FC_DBG("remote %6x ready\n", rport->port_id);
+
+       if (rport == lport->dns_rp &&
+           lport->state == LPORT_ST_DNS) {
+               fc_lport_lock(lport);
+               del_timer(&lport->state_timer);
+               lport->tt.dns_register(lport);
+               fc_lport_unlock(lport);
+       }
+}
+
 static void fc_rport_enter_start(struct fc_rport *rport)
 {
        struct fc_rport_libfc_priv *rp = rport->dd_data;
@@ -371,16 +391,7 @@ static void fc_rport_reject(struct fc_rport *rport)
                }
                break;
        case RPORT_ST_RTV:
-               fc_rport_state_enter(rport, RPORT_ST_READY);
-               if (fc_rp_debug)
-                       FC_DBG("remote %6x ready\n", rport->port_id);
-               if (rport == lp->dns_rp &&
-                   lp->state == LPORT_ST_DNS) {
-                       fc_lport_lock(lp);
-                       del_timer(&lp->state_timer);
-                       lp->tt.dns_register(lp);
-                       fc_lport_unlock(lp);
-               }
+               fc_rport_enter_ready(rport);
                break;
        case RPORT_ST_LOGO:
                fc_rport_state_enter(rport, RPORT_ST_INIT);
@@ -715,16 +726,7 @@ static void fc_rport_enter_prli(struct fc_rport *rport)
         * This should be made more general, possibly moved to the FCP layer.
         */
        if (rport->port_id >= FC_FID_DOM_MGR) {
-               fc_rport_state_enter(rport, RPORT_ST_READY);
-               if (fc_rp_debug)
-                       FC_DBG("remote %6x ready\n", rport->port_id);
-               if (rport == lp->dns_rp &&
-                   lp->state == LPORT_ST_DNS) {
-                       fc_lport_lock(lp);
-                       del_timer(&lp->state_timer);
-                       lp->tt.dns_register(lp);
-                       fc_lport_unlock(lp);
-               }
+               fc_rport_enter_ready(rport);
                return;
        }
        fp = fc_frame_alloc(lp, sizeof(*pp));
@@ -762,7 +764,6 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct 
fc_frame *fp,
 {
        struct fc_rport *rport = rp_arg;
        struct fc_rport_libfc_priv *rp = rport->dd_data;
-       struct fc_lport *lp = rp->local_port;
        u8 op;
 
        if (IS_ERR(fp)) {
@@ -792,17 +793,9 @@ static void fc_rport_rtv_resp(struct fc_seq *sp, struct 
fc_frame *fp,
                        rp->e_d_tov = tov;
                }
        }
-       fc_rport_state_enter(rport, RPORT_ST_READY);
+
+       fc_rport_enter_ready(rport);
        fc_rport_unlock(rport);
-       if (fc_rp_debug)
-               FC_DBG("remote %6x ready\n", rport->port_id);
-       if (rport == lp->dns_rp &&
-           lp->state == LPORT_ST_DNS) {
-               fc_lport_lock(lp);
-               del_timer(&lp->state_timer);
-               lp->tt.dns_register(lp);
-               fc_lport_unlock(lp);
-       }
        fc_frame_free(fp);
 }
 
@@ -1190,16 +1183,7 @@ static void fc_rport_recv_prli_req(struct fc_rport 
*rport,
                switch (rp->rp_state) {
                case RPORT_ST_PLOGI_RECV:
                case RPORT_ST_PRLI:
-                       fc_rport_state_enter(rport, RPORT_ST_READY);
-                       if (fc_rp_debug)
-                               FC_DBG("remote %6x ready\n", rport->port_id);
-                       if (rport == lp->dns_rp &&
-                           lp->state == LPORT_ST_DNS) {
-                               fc_lport_lock(lp);
-                               del_timer(&lp->state_timer);
-                               lp->tt.dns_register(lp);
-                               fc_lport_unlock(lp);
-                       }
+                       fc_rport_enter_ready(rport);
                        break;
                case RPORT_ST_READY:
                        break;

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to