On Sat, Jul 20, 2019 at 4:05 PM James Bottomley
<james.bottom...@hansenpartnership.com> wrote:
>
> Is that a Reviewed-By or Tested-by?  If so we can slide it into one of
> the -rc candidates.

So I can't really test it. Also, I replied to the first version of the
patch, there was a better series of four patches.

I tried to look for them on lore, but it looks like linux-scsi isn't
part of the archiving.

The message ID of the 0/4 message is
  20190605073942.125577-1-h...@suse.de

All the patches looked sane to me, but I really can't say much else
than "looks good to me" and "it does fix the gcc-9 warning".

Attaching the original emails here for convenience. I "tested" them
(ie applied and built them) on top of plain 5.2, but I don't think
anything has changed anywhere in this area.

Maybe Hannes has more input on this? Maybe even an updated series?

             Linus
--- Begin Message ---
It will only ever be set so another callback, and the pointer to
this callback is available on all locations. So kill it.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 drivers/scsi/libfc/fc_rport.c | 13 ++++++-------
 include/scsi/libfc.h          |  3 ---
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 0da34c7a6866..255e6568be66 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -155,10 +155,9 @@ struct fc_rport_priv *fc_rport_create(struct fc_lport 
*lport, u32 port_id)
        rdata->maxframe_size = FC_MIN_MAX_PAYLOAD;
        INIT_DELAYED_WORK(&rdata->retry_work, fc_rport_timeout);
        INIT_WORK(&rdata->event_work, fc_rport_work);
-       if (port_id != FC_FID_DIR_SERV) {
-               rdata->lld_event_callback = lport->tt.rport_event_callback;
+       if (port_id != FC_FID_DIR_SERV)
                list_add_rcu(&rdata->peers, &lport->disc.rports);
-       }
+
        return rdata;
 }
 EXPORT_SYMBOL(fc_rport_create);
@@ -308,9 +307,9 @@ static void fc_rport_work(struct work_struct *work)
                        FC_RPORT_DBG(rdata, "callback ev %d\n", event);
                        rport_ops->event_callback(lport, rdata, event);
                }
-               if (rdata->lld_event_callback) {
+               if (lport->tt.rport_event_callback) {
                        FC_RPORT_DBG(rdata, "lld callback ev %d\n", event);
-                       rdata->lld_event_callback(lport, rdata, event);
+                       lport->tt.rport_event_callback(lport, rdata, event);
                }
                kref_put(&rdata->kref, fc_rport_destroy);
                break;
@@ -334,9 +333,9 @@ static void fc_rport_work(struct work_struct *work)
                        FC_RPORT_DBG(rdata, "callback ev %d\n", event);
                        rport_ops->event_callback(lport, rdata, event);
                }
-               if (rdata->lld_event_callback) {
+               if (lport->tt.rport_event_callback) {
                        FC_RPORT_DBG(rdata, "lld callback ev %d\n", event);
-                       rdata->lld_event_callback(lport, rdata, event);
+                       lport->tt.rport_event_callback(lport, rdata, event);
                }
                if (cancel_delayed_work_sync(&rdata->retry_work))
                        kref_put(&rdata->kref, fc_rport_destroy);
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 76cb9192319a..2c3c5b9e7cc6 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -212,9 +212,6 @@ struct fc_rport_priv {
        struct rcu_head             rcu;
        u16                         sp_features;
        u8                          spp_type;
-       void                        (*lld_event_callback)(struct fc_lport *,
-                                                     struct fc_rport_priv *,
-                                                     enum fc_rport_event);
 };
 
 /**
-- 
2.16.4


--- End Message ---
--- Begin Message ---
No functional change.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 include/scsi/libfc.h | 52 ++++++++++++++++++++++++++--------------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 2c3c5b9e7cc6..13dd2eebc20e 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -115,7 +115,7 @@ struct fc_disc_port {
        struct fc_lport    *lp;
        struct list_head   peers;
        struct work_struct rport_work;
-       u32                port_id;
+       u32                port_id;
 };
 
 /**
@@ -155,14 +155,14 @@ struct fc_rport_operations {
  */
 struct fc_rport_libfc_priv {
        struct fc_lport            *local_port;
-       enum fc_rport_state        rp_state;
+       enum fc_rport_state        rp_state;
        u16                        flags;
        #define FC_RP_FLAGS_REC_SUPPORTED       (1 << 0)
        #define FC_RP_FLAGS_RETRY               (1 << 1)
        #define FC_RP_STARTED                   (1 << 2)
        #define FC_RP_FLAGS_CONF_REQ            (1 << 3)
-       unsigned int               e_d_tov;
-       unsigned int               r_a_tov;
+       unsigned int               e_d_tov;
+       unsigned int               r_a_tov;
 };
 
 /**
@@ -191,24 +191,24 @@ struct fc_rport_priv {
        struct fc_lport             *local_port;
        struct fc_rport             *rport;
        struct kref                 kref;
-       enum fc_rport_state         rp_state;
+       enum fc_rport_state         rp_state;
        struct fc_rport_identifiers ids;
        u16                         flags;
-       u16                         max_seq;
+       u16                         max_seq;
        u16                         disc_id;
        u16                         maxframe_size;
-       unsigned int                retries;
-       unsigned int                major_retries;
-       unsigned int                e_d_tov;
-       unsigned int                r_a_tov;
-       struct mutex                rp_mutex;
+       unsigned int                retries;
+       unsigned int                major_retries;
+       unsigned int                e_d_tov;
+       unsigned int                r_a_tov;
+       struct mutex                rp_mutex;
        struct delayed_work         retry_work;
-       enum fc_rport_event         event;
+       enum fc_rport_event         event;
        struct fc_rport_operations  *ops;
-       struct list_head            peers;
-       struct work_struct          event_work;
+       struct list_head            peers;
+       struct work_struct          event_work;
        u32                         supported_classes;
-       u16                         prli_count;
+       u16                         prli_count;
        struct rcu_head             rcu;
        u16                         sp_features;
        u8                          spp_type;
@@ -615,12 +615,12 @@ struct libfc_function_template {
  * @disc_callback: Callback routine called when discovery completes
  */
 struct fc_disc {
-       unsigned char         retry_count;
-       unsigned char         pending;
-       unsigned char         requested;
-       unsigned short        seq_count;
-       unsigned char         buf_len;
-       u16                   disc_id;
+       unsigned char         retry_count;
+       unsigned char         pending;
+       unsigned char         requested;
+       unsigned short        seq_count;
+       unsigned char         buf_len;
+       u16                   disc_id;
 
        struct list_head      rports;
        void                  *priv;
@@ -694,7 +694,7 @@ struct fc_lport {
        struct fc_rport_priv           *ms_rdata;
        struct fc_rport_priv           *ptp_rdata;
        void                           *scsi_priv;
-       struct fc_disc                 disc;
+       struct fc_disc                 disc;
 
        /* Virtual port information */
        struct list_head               vports;
@@ -712,7 +712,7 @@ struct fc_lport {
        u8                             retry_count;
 
        /* Fabric information */
-       u32                            port_id;
+       u32                            port_id;
        u64                            wwpn;
        u64                            wwnn;
        unsigned int                   service_params;
@@ -740,11 +740,11 @@ struct fc_lport {
        struct fc_ns_fts               fcts;
 
        /* Miscellaneous */
-       struct mutex                   lp_mutex;
-       struct list_head               list;
+       struct mutex                   lp_mutex;
+       struct list_head               list;
        struct delayed_work            retry_work;
        void                           *prov[FC_FC4_PROV_SIZE];
-       struct list_head               lport_list;
+       struct list_head               lport_list;
 };
 
 /**
-- 
2.16.4


--- End Message ---
--- Begin Message ---
Gcc-9 complains for a memset across pointer boundaries, which happens
as the code tries to allocate a flexible array on the stack.
Turns out we cannot do this without relying on gcc-isms, so
with this patch we'll embed the fc_rport_priv structure into
fcoe_rport, can use the normal 'container_of' outcast, and
will only have to do a memset over one structure.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 drivers/scsi/fcoe/fcoe_ctlr.c | 41 ++++++++++++++++-------------------------
 drivers/scsi/libfc/fc_rport.c |  5 ++++-
 include/scsi/libfcoe.h        |  1 +
 3 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 0d7770d07405..728ff37111ed 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -2005,7 +2005,7 @@ EXPORT_SYMBOL_GPL(fcoe_wwn_from_mac);
  */
 static inline struct fcoe_rport *fcoe_ctlr_rport(struct fc_rport_priv *rdata)
 {
-       return (struct fcoe_rport *)(rdata + 1);
+       return container_of(rdata, struct fcoe_rport, rdata);
 }
 
 /**
@@ -2269,7 +2269,7 @@ static void fcoe_ctlr_vn_start(struct fcoe_ctlr *fip)
  */
 static int fcoe_ctlr_vn_parse(struct fcoe_ctlr *fip,
                              struct sk_buff *skb,
-                             struct fc_rport_priv *rdata)
+                             struct fcoe_rport *frport)
 {
        struct fip_header *fiph;
        struct fip_desc *desc = NULL;
@@ -2277,16 +2277,12 @@ static int fcoe_ctlr_vn_parse(struct fcoe_ctlr *fip,
        struct fip_wwn_desc *wwn = NULL;
        struct fip_vn_desc *vn = NULL;
        struct fip_size_desc *size = NULL;
-       struct fcoe_rport *frport;
        size_t rlen;
        size_t dlen;
        u32 desc_mask = 0;
        u32 dtype;
        u8 sub;
 
-       memset(rdata, 0, sizeof(*rdata) + sizeof(*frport));
-       frport = fcoe_ctlr_rport(rdata);
-
        fiph = (struct fip_header *)skb->data;
        frport->flags = ntohs(fiph->fip_flags);
 
@@ -2349,15 +2345,17 @@ static int fcoe_ctlr_vn_parse(struct fcoe_ctlr *fip,
                        if (dlen != sizeof(struct fip_wwn_desc))
                                goto len_err;
                        wwn = (struct fip_wwn_desc *)desc;
-                       rdata->ids.node_name = get_unaligned_be64(&wwn->fd_wwn);
+                       frport->rdata.ids.node_name =
+                               get_unaligned_be64(&wwn->fd_wwn);
                        break;
                case FIP_DT_VN_ID:
                        if (dlen != sizeof(struct fip_vn_desc))
                                goto len_err;
                        vn = (struct fip_vn_desc *)desc;
                        memcpy(frport->vn_mac, vn->fd_mac, ETH_ALEN);
-                       rdata->ids.port_id = ntoh24(vn->fd_fc_id);
-                       rdata->ids.port_name = get_unaligned_be64(&vn->fd_wwpn);
+                       frport->rdata.ids.port_id = ntoh24(vn->fd_fc_id);
+                       frport->rdata.ids.port_name =
+                               get_unaligned_be64(&vn->fd_wwpn);
                        break;
                case FIP_DT_FC4F:
                        if (dlen != sizeof(struct fip_fc4_feat))
@@ -2738,10 +2736,7 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
 {
        struct fip_header *fiph;
        enum fip_vn2vn_subcode sub;
-       struct {
-               struct fc_rport_priv rdata;
-               struct fcoe_rport frport;
-       } buf;
+       struct fcoe_rport buf;
        int rc, vlan_id = 0;
 
        fiph = (struct fip_header *)skb->data;
@@ -2757,7 +2752,8 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
                goto drop;
        }
 
-       rc = fcoe_ctlr_vn_parse(fip, skb, &buf.rdata);
+       memset(&buf, 0, sizeof(buf));
+       rc = fcoe_ctlr_vn_parse(fip, skb, &buf);
        if (rc) {
                LIBFCOE_FIP_DBG(fip, "vn_recv vn_parse error %d\n", rc);
                goto drop;
@@ -2802,22 +2798,18 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
  */
 static int fcoe_ctlr_vlan_parse(struct fcoe_ctlr *fip,
                              struct sk_buff *skb,
-                             struct fc_rport_priv *rdata)
+                             struct fcoe_rport *frport)
 {
        struct fip_header *fiph;
        struct fip_desc *desc = NULL;
        struct fip_mac_desc *macd = NULL;
        struct fip_wwn_desc *wwn = NULL;
-       struct fcoe_rport *frport;
        size_t rlen;
        size_t dlen;
        u32 desc_mask = 0;
        u32 dtype;
        u8 sub;
 
-       memset(rdata, 0, sizeof(*rdata) + sizeof(*frport));
-       frport = fcoe_ctlr_rport(rdata);
-
        fiph = (struct fip_header *)skb->data;
        frport->flags = ntohs(fiph->fip_flags);
 
@@ -2871,7 +2863,8 @@ static int fcoe_ctlr_vlan_parse(struct fcoe_ctlr *fip,
                        if (dlen != sizeof(struct fip_wwn_desc))
                                goto len_err;
                        wwn = (struct fip_wwn_desc *)desc;
-                       rdata->ids.node_name = get_unaligned_be64(&wwn->fd_wwn);
+                       frport->rdata.ids.node_name =
+                               get_unaligned_be64(&wwn->fd_wwn);
                        break;
                default:
                        LIBFCOE_FIP_DBG(fip, "unexpected descriptor type %x "
@@ -2982,15 +2975,13 @@ static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
 {
        struct fip_header *fiph;
        enum fip_vlan_subcode sub;
-       struct {
-               struct fc_rport_priv rdata;
-               struct fcoe_rport frport;
-       } buf;
+       struct fcoe_rport buf;
        int rc;
 
        fiph = (struct fip_header *)skb->data;
        sub = fiph->fip_subcode;
-       rc = fcoe_ctlr_vlan_parse(fip, skb, &buf.rdata);
+       memset(&buf, 0, sizeof(buf));
+       rc = fcoe_ctlr_vlan_parse(fip, skb, &buf);
        if (rc) {
                LIBFCOE_FIP_DBG(fip, "vlan_recv vlan_parse error %d\n", rc);
                goto drop;
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
index 255e6568be66..e3269bb3c1f3 100644
--- a/drivers/scsi/libfc/fc_rport.c
+++ b/drivers/scsi/libfc/fc_rport.c
@@ -128,6 +128,7 @@ EXPORT_SYMBOL(fc_rport_lookup);
 struct fc_rport_priv *fc_rport_create(struct fc_lport *lport, u32 port_id)
 {
        struct fc_rport_priv *rdata;
+       size_t rport_priv_size = sizeof(*rdata);
 
        lockdep_assert_held(&lport->disc.disc_mutex);
 
@@ -135,7 +136,9 @@ struct fc_rport_priv *fc_rport_create(struct fc_lport 
*lport, u32 port_id)
        if (rdata)
                return rdata;
 
-       rdata = kzalloc(sizeof(*rdata) + lport->rport_priv_size, GFP_KERNEL);
+       if (lport->rport_priv_size > 0)
+               rport_priv_size = lport->rport_priv_size;
+       rdata = kzalloc(rport_priv_size, GFP_KERNEL);
        if (!rdata)
                return NULL;
 
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index ecf3e5978166..138fb8fba748 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
@@ -229,6 +229,7 @@ struct fcoe_fcf {
  * @vn_mac:    VN_Node assigned MAC address for data
  */
 struct fcoe_rport {
+       struct fc_rport_priv rdata;
        unsigned long time;
        u16 fcoe_len;
        u16 flags;
-- 
2.16.4


--- End Message ---
--- Begin Message ---
Instead of using the generic 'fc_rport_priv' structure as argument
and then having to painstakingly outcast this to fcoe_rport we should
be passing the fcoe_rport structure itself and reduce complexity.

Signed-off-by: Hannes Reinecke <h...@suse.com>
---
 drivers/scsi/fcoe/fcoe_ctlr.c | 99 ++++++++++++++++++++++---------------------
 1 file changed, 51 insertions(+), 48 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c
index 728ff37111ed..428bde1c8dd4 100644
--- a/drivers/scsi/fcoe/fcoe_ctlr.c
+++ b/drivers/scsi/fcoe/fcoe_ctlr.c
@@ -2401,16 +2401,14 @@ static void fcoe_ctlr_vn_send_claim(struct fcoe_ctlr 
*fip)
 /**
  * fcoe_ctlr_vn_probe_req() - handle incoming VN2VN probe request.
  * @fip: The FCoE controller
- * @rdata: parsed remote port with frport from the probe request
+ * @frport: parsed FCoE rport from the probe request
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vn_probe_req(struct fcoe_ctlr *fip,
-                                  struct fc_rport_priv *rdata)
+                                  struct fcoe_rport *frport)
 {
-       struct fcoe_rport *frport = fcoe_ctlr_rport(rdata);
-
-       if (rdata->ids.port_id != fip->port_id)
+       if (frport->rdata.ids.port_id != fip->port_id)
                return;
 
        switch (fip->state) {
@@ -2430,7 +2428,7 @@ static void fcoe_ctlr_vn_probe_req(struct fcoe_ctlr *fip,
                 * Probe's REC bit is not set.
                 * If we don't reply, we will change our address.
                 */
-               if (fip->lp->wwpn > rdata->ids.port_name &&
+               if (fip->lp->wwpn > frport->rdata.ids.port_name &&
                    !(frport->flags & FIP_FL_REC_OR_P2P)) {
                        LIBFCOE_FIP_DBG(fip, "vn_probe_req: "
                                        "port_id collision\n");
@@ -2454,14 +2452,14 @@ static void fcoe_ctlr_vn_probe_req(struct fcoe_ctlr 
*fip,
 /**
  * fcoe_ctlr_vn_probe_reply() - handle incoming VN2VN probe reply.
  * @fip: The FCoE controller
- * @rdata: parsed remote port with frport from the probe request
+ * @frport: parsed FCoE rport from the probe request
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vn_probe_reply(struct fcoe_ctlr *fip,
-                                  struct fc_rport_priv *rdata)
+                                    struct fcoe_rport *frport)
 {
-       if (rdata->ids.port_id != fip->port_id)
+       if (frport->rdata.ids.port_id != fip->port_id)
                return;
        switch (fip->state) {
        case FIP_ST_VNMP_START:
@@ -2484,11 +2482,11 @@ static void fcoe_ctlr_vn_probe_reply(struct fcoe_ctlr 
*fip,
 /**
  * fcoe_ctlr_vn_add() - Add a VN2VN entry to the list, based on a claim reply.
  * @fip: The FCoE controller
- * @new: newly-parsed remote port with frport as a template for new rdata
+ * @new: newly-parsed FCoE rport as a template for new rdata
  *
  * Called with ctlr_mutex held.
  */
-static void fcoe_ctlr_vn_add(struct fcoe_ctlr *fip, struct fc_rport_priv *new)
+static void fcoe_ctlr_vn_add(struct fcoe_ctlr *fip, struct fcoe_rport *new)
 {
        struct fc_lport *lport = fip->lp;
        struct fc_rport_priv *rdata;
@@ -2496,7 +2494,7 @@ static void fcoe_ctlr_vn_add(struct fcoe_ctlr *fip, 
struct fc_rport_priv *new)
        struct fcoe_rport *frport;
        u32 port_id;
 
-       port_id = new->ids.port_id;
+       port_id = new->rdata.ids.port_id;
        if (port_id == fip->port_id)
                return;
 
@@ -2513,22 +2511,28 @@ static void fcoe_ctlr_vn_add(struct fcoe_ctlr *fip, 
struct fc_rport_priv *new)
        rdata->disc_id = lport->disc.disc_id;
 
        ids = &rdata->ids;
-       if ((ids->port_name != -1 && ids->port_name != new->ids.port_name) ||
-           (ids->node_name != -1 && ids->node_name != new->ids.node_name)) {
+       if ((ids->port_name != -1 &&
+            ids->port_name != new->rdata.ids.port_name) ||
+           (ids->node_name != -1 &&
+            ids->node_name != new->rdata.ids.node_name)) {
                mutex_unlock(&rdata->rp_mutex);
                LIBFCOE_FIP_DBG(fip, "vn_add rport logoff %6.6x\n", port_id);
                fc_rport_logoff(rdata);
                mutex_lock(&rdata->rp_mutex);
        }
-       ids->port_name = new->ids.port_name;
-       ids->node_name = new->ids.node_name;
+       ids->port_name = new->rdata.ids.port_name;
+       ids->node_name = new->rdata.ids.node_name;
        mutex_unlock(&rdata->rp_mutex);
 
        frport = fcoe_ctlr_rport(rdata);
        LIBFCOE_FIP_DBG(fip, "vn_add rport %6.6x %s state %d\n",
                        port_id, frport->fcoe_len ? "old" : "new",
                        rdata->rp_state);
-       *frport = *fcoe_ctlr_rport(new);
+       frport->fcoe_len = new->fcoe_len;
+       frport->flags = new->flags;
+       frport->login_count = new->login_count;
+       memcpy(frport->enode_mac, new->enode_mac, ETH_ALEN);
+       memcpy(frport->vn_mac, new->vn_mac, ETH_ALEN);
        frport->time = 0;
 }
 
@@ -2560,16 +2564,14 @@ static int fcoe_ctlr_vn_lookup(struct fcoe_ctlr *fip, 
u32 port_id, u8 *mac)
 /**
  * fcoe_ctlr_vn_claim_notify() - handle received FIP VN2VN Claim Notification
  * @fip: The FCoE controller
- * @new: newly-parsed remote port with frport as a template for new rdata
+ * @new: newly-parsed FCoE rport as a template for new rdata
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vn_claim_notify(struct fcoe_ctlr *fip,
-                                     struct fc_rport_priv *new)
+                                     struct fcoe_rport *new)
 {
-       struct fcoe_rport *frport = fcoe_ctlr_rport(new);
-
-       if (frport->flags & FIP_FL_REC_OR_P2P) {
+       if (new->flags & FIP_FL_REC_OR_P2P) {
                LIBFCOE_FIP_DBG(fip, "send probe req for P2P/REC\n");
                fcoe_ctlr_vn_send(fip, FIP_SC_VN_PROBE_REQ, fcoe_all_vn2vn, 0);
                return;
@@ -2578,7 +2580,7 @@ static void fcoe_ctlr_vn_claim_notify(struct fcoe_ctlr 
*fip,
        case FIP_ST_VNMP_START:
        case FIP_ST_VNMP_PROBE1:
        case FIP_ST_VNMP_PROBE2:
-               if (new->ids.port_id == fip->port_id) {
+               if (new->rdata.ids.port_id == fip->port_id) {
                        LIBFCOE_FIP_DBG(fip, "vn_claim_notify: "
                                        "restart, state %d\n",
                                        fip->state);
@@ -2587,8 +2589,8 @@ static void fcoe_ctlr_vn_claim_notify(struct fcoe_ctlr 
*fip,
                break;
        case FIP_ST_VNMP_CLAIM:
        case FIP_ST_VNMP_UP:
-               if (new->ids.port_id == fip->port_id) {
-                       if (new->ids.port_name > fip->lp->wwpn) {
+               if (new->rdata.ids.port_id == fip->port_id) {
+                       if (new->rdata.ids.port_name > fip->lp->wwpn) {
                                LIBFCOE_FIP_DBG(fip, "vn_claim_notify: "
                                                "restart, port_id collision\n");
                                fcoe_ctlr_vn_restart(fip);
@@ -2600,15 +2602,16 @@ static void fcoe_ctlr_vn_claim_notify(struct fcoe_ctlr 
*fip,
                        break;
                }
                LIBFCOE_FIP_DBG(fip, "vn_claim_notify: send reply to %x\n",
-                               new->ids.port_id);
-               fcoe_ctlr_vn_send(fip, FIP_SC_VN_CLAIM_REP, frport->enode_mac,
-                                 min((u32)frport->fcoe_len,
+                               new->rdata.ids.port_id);
+               fcoe_ctlr_vn_send(fip, FIP_SC_VN_CLAIM_REP, new->enode_mac,
+                                 min((u32)new->fcoe_len,
                                      fcoe_ctlr_fcoe_size(fip)));
                fcoe_ctlr_vn_add(fip, new);
                break;
        default:
                LIBFCOE_FIP_DBG(fip, "vn_claim_notify: "
-                               "ignoring claim from %x\n", new->ids.port_id);
+                               "ignoring claim from %x\n",
+                               new->rdata.ids.port_id);
                break;
        }
 }
@@ -2616,15 +2619,15 @@ static void fcoe_ctlr_vn_claim_notify(struct fcoe_ctlr 
*fip,
 /**
  * fcoe_ctlr_vn_claim_resp() - handle received Claim Response
  * @fip: The FCoE controller that received the frame
- * @new: newly-parsed remote port with frport from the Claim Response
+ * @new: newly-parsed FCoE rport from the Claim Response
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vn_claim_resp(struct fcoe_ctlr *fip,
-                                   struct fc_rport_priv *new)
+                                   struct fcoe_rport *new)
 {
        LIBFCOE_FIP_DBG(fip, "claim resp from from rport %x - state %s\n",
-                       new->ids.port_id, fcoe_ctlr_state(fip->state));
+                       new->rdata.ids.port_id, fcoe_ctlr_state(fip->state));
        if (fip->state == FIP_ST_VNMP_UP || fip->state == FIP_ST_VNMP_CLAIM)
                fcoe_ctlr_vn_add(fip, new);
 }
@@ -2632,28 +2635,28 @@ static void fcoe_ctlr_vn_claim_resp(struct fcoe_ctlr 
*fip,
 /**
  * fcoe_ctlr_vn_beacon() - handle received beacon.
  * @fip: The FCoE controller that received the frame
- * @new: newly-parsed remote port with frport from the Beacon
+ * @new: newly-parsed FCoE rport from the Beacon
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vn_beacon(struct fcoe_ctlr *fip,
-                               struct fc_rport_priv *new)
+                               struct fcoe_rport *new)
 {
        struct fc_lport *lport = fip->lp;
        struct fc_rport_priv *rdata;
        struct fcoe_rport *frport;
 
-       frport = fcoe_ctlr_rport(new);
-       if (frport->flags & FIP_FL_REC_OR_P2P) {
+       if (new->flags & FIP_FL_REC_OR_P2P) {
                LIBFCOE_FIP_DBG(fip, "p2p beacon while in vn2vn mode\n");
                fcoe_ctlr_vn_send(fip, FIP_SC_VN_PROBE_REQ, fcoe_all_vn2vn, 0);
                return;
        }
-       rdata = fc_rport_lookup(lport, new->ids.port_id);
+       rdata = fc_rport_lookup(lport, new->rdata.ids.port_id);
        if (rdata) {
-               if (rdata->ids.node_name == new->ids.node_name &&
-                   rdata->ids.port_name == new->ids.port_name) {
+               if (rdata->ids.node_name == new->rdata.ids.node_name &&
+                   rdata->ids.port_name == new->rdata.ids.port_name) {
                        frport = fcoe_ctlr_rport(rdata);
+
                        LIBFCOE_FIP_DBG(fip, "beacon from rport %x\n",
                                        rdata->ids.port_id);
                        if (!frport->time && fip->state == FIP_ST_VNMP_UP) {
@@ -2676,7 +2679,7 @@ static void fcoe_ctlr_vn_beacon(struct fcoe_ctlr *fip,
         * Don't add the neighbor yet.
         */
        LIBFCOE_FIP_DBG(fip, "beacon from new rport %x. sending claim notify\n",
-                       new->ids.port_id);
+                       new->rdata.ids.port_id);
        if (time_after(jiffies,
                       fip->sol_time + msecs_to_jiffies(FIP_VN_ANN_WAIT)))
                fcoe_ctlr_vn_send_claim(fip);
@@ -2762,19 +2765,19 @@ static int fcoe_ctlr_vn_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
        mutex_lock(&fip->ctlr_mutex);
        switch (sub) {
        case FIP_SC_VN_PROBE_REQ:
-               fcoe_ctlr_vn_probe_req(fip, &buf.rdata);
+               fcoe_ctlr_vn_probe_req(fip, &buf);
                break;
        case FIP_SC_VN_PROBE_REP:
-               fcoe_ctlr_vn_probe_reply(fip, &buf.rdata);
+               fcoe_ctlr_vn_probe_reply(fip, &buf);
                break;
        case FIP_SC_VN_CLAIM_NOTIFY:
-               fcoe_ctlr_vn_claim_notify(fip, &buf.rdata);
+               fcoe_ctlr_vn_claim_notify(fip, &buf);
                break;
        case FIP_SC_VN_CLAIM_REP:
-               fcoe_ctlr_vn_claim_resp(fip, &buf.rdata);
+               fcoe_ctlr_vn_claim_resp(fip, &buf);
                break;
        case FIP_SC_VN_BEACON:
-               fcoe_ctlr_vn_beacon(fip, &buf.rdata);
+               fcoe_ctlr_vn_beacon(fip, &buf);
                break;
        default:
                LIBFCOE_FIP_DBG(fip, "vn_recv unknown subcode %d\n", sub);
@@ -2950,13 +2953,13 @@ static void fcoe_ctlr_vlan_send(struct fcoe_ctlr *fip,
 /**
  * fcoe_ctlr_vlan_disk_reply() - send FIP VLAN Discovery Notification.
  * @fip: The FCoE controller
+ * @frport: The newly-parsed FCoE rport from the Discovery Request
  *
  * Called with ctlr_mutex held.
  */
 static void fcoe_ctlr_vlan_disc_reply(struct fcoe_ctlr *fip,
-                                     struct fc_rport_priv *rdata)
+                                     struct fcoe_rport *frport)
 {
-       struct fcoe_rport *frport = fcoe_ctlr_rport(rdata);
        enum fip_vlan_subcode sub = FIP_SC_VL_NOTE;
 
        if (fip->mode == FIP_MODE_VN2VN)
@@ -2988,7 +2991,7 @@ static int fcoe_ctlr_vlan_recv(struct fcoe_ctlr *fip, 
struct sk_buff *skb)
        }
        mutex_lock(&fip->ctlr_mutex);
        if (sub == FIP_SC_VL_REQ)
-               fcoe_ctlr_vlan_disc_reply(fip, &buf.rdata);
+               fcoe_ctlr_vlan_disc_reply(fip, &buf);
        mutex_unlock(&fip->ctlr_mutex);
 
 drop:
-- 
2.16.4


--- End Message ---

Reply via email to