*
  * The received frame is not freed.
  */
-static void fc_seq_els_rsp_send(struct fc_frame *fp, enum fc_els_cmd els_cmd,
-                               struct fc_seq_els_data *els_data)
+void fc_seq_els_rsp_send(struct fc_frame *fp, enum fc_els_cmd els_cmd,
+                        struct fc_seq_els_data *els_data)
 {
        switch (els_cmd) {
        case ELS_LS_RJT:
                FC_LPORT_DBG(fr_dev(fp), "Invalid ELS CMD:%x\n", els_cmd);
        }
 }
+EXPORT_SYMBOL_GPL(fc_seq_els_rsp_send);
 
 /**
  * fc_seq_send_last() - Send a sequence that is the last in the exchange
        if (!lport->tt.seq_send)
                lport->tt.seq_send = fc_seq_send;
 
-       if (!lport->tt.seq_els_rsp_send)
-               lport->tt.seq_els_rsp_send = fc_seq_els_rsp_send;
-
        if (!lport->tt.exch_done)
                lport->tt.exch_done = fc_exch_done;
 
 
        FC_LPORT_DBG(lport, "Received RLIR request while in state %s\n",
                     fc_lport_state(lport));
 
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
+       fc_seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
        fc_frame_free(fp);
 }
 
        if (!req) {
                rjt_data.reason = ELS_RJT_LOGIC;
                rjt_data.explan = ELS_EXPL_NONE;
-               lport->tt.seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
+               fc_seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
        } else {
                fmt = req->rnid_fmt;
                len = sizeof(*rp);
  */
 static void fc_lport_recv_logo_req(struct fc_lport *lport, struct fc_frame *fp)
 {
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
+       fc_seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
        fc_lport_enter_reset(lport);
        fc_frame_free(fp);
 }
 
 reject_put:
        kref_put(&rdata->kref, lport->tt.rport_destroy);
 reject:
-       lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
+       fc_seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
        fc_frame_free(rx_fp);
 }
 
        if (!fp) {
                rjt_data.reason = ELS_RJT_UNAB;
                rjt_data.reason = ELS_EXPL_INSUF_RES;
-               lport->tt.seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
+               fc_seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
                goto drop;
        }
        rtv = fc_frame_payload_get(fp, sizeof(*rtv));
        if (!adisc) {
                rjt_data.reason = ELS_RJT_PROT;
                rjt_data.explan = ELS_EXPL_INV_LEN;
-               lport->tt.seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
+               fc_seq_els_rsp_send(in_fp, ELS_LS_RJT, &rjt_data);
                goto drop;
        }
 
        goto out;
 
 out_rjt:
-       lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
+       fc_seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
 out:
        fc_frame_free(rx_fp);
 }
                fc_rport_recv_adisc_req(rdata, fp);
                break;
        case ELS_RRQ:
-               lport->tt.seq_els_rsp_send(fp, ELS_RRQ, NULL);
+               fc_seq_els_rsp_send(fp, ELS_RRQ, NULL);
                fc_frame_free(fp);
                break;
        case ELS_REC:
-               lport->tt.seq_els_rsp_send(fp, ELS_REC, NULL);
+               fc_seq_els_rsp_send(fp, ELS_REC, NULL);
                fc_frame_free(fp);
                break;
        case ELS_RLS:
 reject:
        els_data.reason = ELS_RJT_UNAB;
        els_data.explan = ELS_EXPL_PLOGI_REQD;
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
+       fc_seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
        fc_frame_free(fp);
        return;
 
 busy:
        els_data.reason = ELS_RJT_BUSY;
        els_data.explan = ELS_EXPL_NONE;
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
+       fc_seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
        fc_frame_free(fp);
        return;
 }
        default:
                els_data.reason = ELS_RJT_UNSUP;
                els_data.explan = ELS_EXPL_NONE;
-               lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
+               fc_seq_els_rsp_send(fp, ELS_LS_RJT, &els_data);
                fc_frame_free(fp);
                break;
        }
        return;
 
 reject:
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_RJT, &rjt_data);
+       fc_seq_els_rsp_send(fp, ELS_LS_RJT, &rjt_data);
        fc_frame_free(fp);
 }
 
        rjt_data.reason = ELS_RJT_PROT;
        rjt_data.explan = ELS_EXPL_INV_LEN;
 reject:
-       lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
+       fc_seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
 drop:
        fc_frame_free(rx_fp);
 }
        rjt_data.reason = ELS_RJT_PROT;
        rjt_data.explan = ELS_EXPL_INV_LEN;
 reject:
-       lport->tt.seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
+       fc_seq_els_rsp_send(rx_fp, ELS_LS_RJT, &rjt_data);
 drop:
        fc_frame_free(rx_fp);
 }
        struct fc_rport_priv *rdata;
        u32 sid;
 
-       lport->tt.seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
+       fc_seq_els_rsp_send(fp, ELS_LS_ACC, NULL);
 
        sid = fc_frame_sid(fp);
 
 
        int (*seq_send)(struct fc_lport *, struct fc_seq *,
                        struct fc_frame *);
 
-       /*
-        * Send an ELS response using information from the received frame.
-        *
-        * STATUS: OPTIONAL
-        */
-       void (*seq_els_rsp_send)(struct fc_frame *, enum fc_els_cmd,
-                                struct fc_seq_els_data *);
-
        /*
         * Abort an exchange and sequence. Generally called because of a
         * exchange timeout or an abort from the upper layer.
  *****************************/
 int fc_exch_init(struct fc_lport *);
 void fc_exch_update_stats(struct fc_lport *lport);
+void fc_seq_els_rsp_send(struct fc_frame *, enum fc_els_cmd,
+                        struct fc_seq_els_data *);
 struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *,
                                           struct fc_exch_mgr *,
                                           bool (*match)(struct fc_frame *));