struct bnx2fc_rport *tgt,
                                        struct fc_rport_priv *rdata)
 {
-       struct fc_lport *lport = rdata->local_port;
        struct fc_rport *rport = rdata->rport;
        struct bnx2fc_interface *interface = port->priv;
        struct bnx2fc_hba *hba = interface->hba;
 tgt_init_err:
        if (tgt->fcoe_conn_id != -1)
                bnx2fc_free_conn_id(hba, tgt->fcoe_conn_id);
-       lport->tt.rport_logoff(rdata);
+       fc_rport_logoff(rdata);
 }
 
 void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt)
 
                        LIBFCOE_FIP_DBG(fip,
                                        "rport FLOGI limited port_id %6.6x\n",
                                        rdata->ids.port_id);
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                }
                break;
        default:
        rcu_read_lock();
        list_for_each_entry_rcu(rdata, &lport->disc.rports, peers) {
                if (kref_get_unless_zero(&rdata->kref)) {
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                        kref_put(&rdata->kref, fc_rport_destroy);
                }
        }
            (ids->node_name != -1 && ids->node_name != new->ids.node_name)) {
                mutex_unlock(&rdata->rp_mutex);
                LIBFCOE_FIP_DBG(fip, "vn_add rport logoff %6.6x\n", port_id);
-               lport->tt.rport_logoff(rdata);
+               fc_rport_logoff(rdata);
                mutex_lock(&rdata->rp_mutex);
        }
        ids->port_name = new->ids.port_name;
                        LIBFCOE_FIP_DBG(fip,
                                "port %16.16llx fc_id %6.6x beacon expired\n",
                                rdata->ids.port_name, rdata->ids.port_id);
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                } else if (time_before(deadline, next_time))
                        next_time = deadline;
                kref_put(&rdata->kref, fc_rport_destroy);
 
        rcu_read_lock();
        list_for_each_entry_rcu(rdata, &disc->rports, peers) {
                if (kref_get_unless_zero(&rdata->kref)) {
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                        kref_put(&rdata->kref, fc_rport_destroy);
                }
        }
                        if (rdata->disc_id == disc->disc_id)
                                fc_rport_login(rdata);
                        else
-                               lport->tt.rport_logoff(rdata);
+                               fc_rport_logoff(rdata);
                }
                kref_put(&rdata->kref, fc_rport_destroy);
        }
                                    "Port-id %6.6x wwpn %16.16llx\n",
                                    rdata->ids.port_id, port_name);
                        mutex_unlock(&rdata->rp_mutex);
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                        mutex_lock(&lport->disc.disc_mutex);
                        new_rdata = fc_rport_create(lport, rdata->ids.port_id);
                        mutex_unlock(&lport->disc.disc_mutex);
        } else if (ntohs(cp->ct_cmd) == FC_FS_RJT) {
                FC_DISC_DBG(disc, "GPN_ID rejected reason %x exp %x\n",
                            cp->ct_reason, cp->ct_explan);
-               lport->tt.rport_logoff(rdata);
+               fc_rport_logoff(rdata);
        } else {
                FC_DISC_DBG(disc, "GPN_ID unexpected response code %x\n",
                            ntohs(cp->ct_cmd));
 
                                     "in the DNS or FDMI state, it's in the "
                                     "%d state", rdata->ids.port_id,
                                     lport->state);
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                }
                break;
        case RPORT_EV_LOGO:
                               u64 remote_wwnn)
 {
        if (lport->ptp_rdata) {
-               lport->tt.rport_logoff(lport->ptp_rdata);
+               fc_rport_logoff(lport->ptp_rdata);
                kref_put(&lport->ptp_rdata->kref, fc_rport_destroy);
        }
        mutex_lock(&lport->disc.disc_mutex);
        lport->tt.disc_stop_final(lport);
        mutex_lock(&lport->lp_mutex);
        if (lport->dns_rdata)
-               lport->tt.rport_logoff(lport->dns_rdata);
+               fc_rport_logoff(lport->dns_rdata);
        mutex_unlock(&lport->lp_mutex);
        lport->tt.rport_flush_queue();
        mutex_lock(&lport->lp_mutex);
 static void fc_lport_reset_locked(struct fc_lport *lport)
 {
        if (lport->dns_rdata) {
-               lport->tt.rport_logoff(lport->dns_rdata);
+               fc_rport_logoff(lport->dns_rdata);
                lport->dns_rdata = NULL;
        }
 
        if (lport->ptp_rdata) {
-               lport->tt.rport_logoff(lport->ptp_rdata);
+               fc_rport_logoff(lport->ptp_rdata);
                kref_put(&lport->ptp_rdata->kref, fc_rport_destroy);
                lport->ptp_rdata = NULL;
        }
 
                }
                if (!rport) {
                        FC_RPORT_DBG(rdata, "Failed to add the rport\n");
-                       lport->tt.rport_logoff(rdata);
+                       fc_rport_logoff(rdata);
                        kref_put(&rdata->kref, fc_rport_destroy);
                        return;
                }
  * function will hold the rport lock, call an _enter_*
  * function and then unlock the rport.
  */
-static int fc_rport_logoff(struct fc_rport_priv *rdata)
+int fc_rport_logoff(struct fc_rport_priv *rdata)
 {
        struct fc_lport *lport = rdata->local_port;
        u32 port_id = rdata->ids.port_id;
        mutex_unlock(&rdata->rp_mutex);
        return 0;
 }
+EXPORT_SYMBOL(fc_rport_logoff);
 
 /**
  * fc_rport_enter_ready() - Transition to the RPORT_ST_READY state
  */
 int fc_rport_init(struct fc_lport *lport)
 {
-       if (!lport->tt.rport_logoff)
-               lport->tt.rport_logoff = fc_rport_logoff;
-
        if (!lport->tt.rport_recv_req)
                lport->tt.rport_recv_req = fc_rport_recv_req;
 
 
        void (*lport_set_port_id)(struct fc_lport *, u32 port_id,
                                  struct fc_frame *);
 
-       /*
-        * Logoff, and remove the rport from the transport if
-        * it had been added. This will send a LOGO to the target.
-        *
-        * STATUS: OPTIONAL
-        */
-       int (*rport_logoff)(struct fc_rport_priv *);
-
        /*
         * Receive a request from a remote port.
         *
 struct fc_rport_priv *fc_rport_create(struct fc_lport *, u32);
 void fc_rport_destroy(struct kref *kref);
 int fc_rport_login(struct fc_rport_priv *rdata);
+int fc_rport_logoff(struct fc_rport_priv *rdata);
 
 /*
  * DISCOVERY LAYER