struct fc_lport *lport;
        struct fc_rport_priv *rdata;
 
-       lport = disc->lport;
+       lport = fc_disc_lport(disc);
 
        mutex_lock(&disc->disc_mutex);
        list_for_each_entry_rcu(rdata, &disc->rports, peers)
        LIST_HEAD(disc_ports);
        struct fc_disc_port *dp, *next;
 
-       lport = disc->lport;
+       lport = fc_disc_lport(disc);
 
        FC_DISC_DBG(disc, "Received an RSCN event\n");
 
  */
 static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
 {
-       struct fc_lport *lport = disc->lport;
+       struct fc_lport *lport = fc_disc_lport(disc);
        struct fc_rport_priv *rdata;
 
        FC_DISC_DBG(disc, "Discovery complete\n");
  */
 static void fc_disc_error(struct fc_disc *disc, struct fc_frame *fp)
 {
-       struct fc_lport *lport = disc->lport;
+       struct fc_lport *lport = fc_disc_lport(disc);
        unsigned long delay = 0;
 
        FC_DISC_DBG(disc, "Error %ld, retries %d/%d\n",
 static void fc_disc_gpn_ft_req(struct fc_disc *disc)
 {
        struct fc_frame *fp;
-       struct fc_lport *lport = disc->lport;
+       struct fc_lport *lport = fc_disc_lport(disc);
 
        WARN_ON(!fc_lport_test_ready(lport));
 
        struct fc_rport_identifiers ids;
        struct fc_rport_priv *rdata;
 
-       lport = disc->lport;
+       lport = fc_disc_lport(disc);
        disc->seq_count++;
 
        /*
        mutex_init(&disc->disc_mutex);
        INIT_LIST_HEAD(&disc->rports);
 
-       disc->lport = lport;
+       disc->priv = lport;
 
        return 0;
 }
 
 #define FC_DISC_DBG(disc, fmt, args...)                                \
        FC_CHECK_LOGGING(FC_DISC_LOGGING,                       \
                         printk(KERN_INFO "host%u: disc: " fmt, \
-                               (disc)->lport->host->host_no,   \
+                               fc_disc_lport(disc)->host->host_no,     \
                                ##args))
 
 #define FC_RPORT_ID_DBG(lport, port_id, fmt, args...)                  \
 
  * @buf_len:       Length of the discovery buffer
  * @disc_id:       Discovery ID
  * @rports:        List of discovered remote ports
- * @lport:         The local port that discovery is for
+ * @priv:          Private pointer for use by discovery code
  * @disc_mutex:    Mutex that protects the discovery context
  * @partial_buf:   Partial name buffer (if names are returned
  *                 in multiple frames)
        u16                   disc_id;
 
        struct list_head      rports;
-       struct fc_lport       *lport;
+       void                  *priv;
        struct mutex          disc_mutex;
        struct fc_gpn_ft_resp partial_buf;
        struct delayed_work   disc_work;
  *****************************/
 int fc_disc_init(struct fc_lport *);
 
+static inline struct fc_lport *fc_disc_lport(struct fc_disc *disc)
+{
+       return container_of(disc, struct fc_lport, disc);
+}
+
 /*
  * FCP LAYER
  *****************************/