[SCSI] fcoe: move offload exchange manager pointer from fcoe_port to fcoe_interface
authorChris Leech <christopher.leech@intel.com>
Tue, 25 Aug 2009 20:59:51 +0000 (13:59 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Thu, 10 Sep 2009 17:07:33 +0000 (12:07 -0500)
The offload EM pointer is only used when setting up a new libfc instance, but
as it's designed to be shared among NPIV VN_Ports it should be tracked in
fcoe_interface.

With the host-list changed to track fcoe_interfaces as well, this is needed
before we can remove the priv pointer from that structure (which is only there
to help in the transition, and stops making sense once NPIV is enabled).

Signed-off-by: Chris Leech <christopher.leech@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/fcoe/fcoe.c
drivers/scsi/fcoe/fcoe.h

index 01519c722edf9994a7f469b0b2ae1c97169d5f76..bb59a7a04f23f75a22915b262607b38d141cf3ed 100644 (file)
@@ -438,7 +438,6 @@ bool fcoe_oem_match(struct fc_frame *fp)
 static inline int fcoe_em_config(struct fc_lport *lp)
 {
        struct fcoe_port *port = lport_priv(lp);
-       struct fcoe_port *oldport = NULL;
        struct fcoe_interface *fcoe = port->fcoe;
        struct fcoe_interface *oldfcoe = NULL;
        struct net_device *old_real_dev, *cur_real_dev;
@@ -464,30 +463,29 @@ static inline int fcoe_em_config(struct fc_lport *lp)
                cur_real_dev = fcoe->netdev;
 
        list_for_each_entry(oldfcoe, &fcoe_hostlist, list) {
-               oldport = oldfcoe->priv;
                if (oldfcoe->netdev->priv_flags & IFF_802_1Q_VLAN)
                        old_real_dev = vlan_dev_real_dev(oldfcoe->netdev);
                else
                        old_real_dev = oldfcoe->netdev;
 
                if (cur_real_dev == old_real_dev) {
-                       port->oem = oldport->oem;
+                       fcoe->oem = oldfcoe->oem;
                        break;
                }
        }
 
-       if (port->oem) {
-               if (!fc_exch_mgr_add(lp, port->oem, fcoe_oem_match)) {
+       if (fcoe->oem) {
+               if (!fc_exch_mgr_add(lp, fcoe->oem, fcoe_oem_match)) {
                        printk(KERN_ERR "fcoe_em_config: failed to add "
                               "offload em:%p on interface:%s\n",
-                              port->oem, fcoe->netdev->name);
+                              fcoe->oem, fcoe->netdev->name);
                        return -ENOMEM;
                }
        } else {
-               port->oem = fc_exch_mgr_alloc(lp, FC_CLASS_3,
+               fcoe->oem = fc_exch_mgr_alloc(lp, FC_CLASS_3,
                                            FCOE_MIN_XID, lp->lro_xid,
                                            fcoe_oem_match);
-               if (!port->oem) {
+               if (!fcoe->oem) {
                        printk(KERN_ERR "fcoe_em_config: failed to allocate "
                               "em for offload exches on interface:%s\n",
                               fcoe->netdev->name);
index 5b190b5fea3f8423fad0649f3cbfedd0d82d8a29..26e8595746045d102ce407dc83a53efebba62841 100644 (file)
@@ -86,6 +86,7 @@ struct fcoe_interface {
        struct packet_type  fcoe_packet_type;
        struct packet_type  fip_packet_type;
        struct fcoe_ctlr ctlr;
+       struct fc_exch_mgr *oem;                /* offload exchange manager */
 };
 
 /*
@@ -94,7 +95,6 @@ struct fcoe_interface {
  */
 struct fcoe_port {
        struct fcoe_interface *fcoe;
-       struct fc_exch_mgr *oem;                /* offload exchange manger */
        struct sk_buff_head fcoe_pending_queue;
        u8      fcoe_pending_queue_active;
        struct timer_list timer;                /* queue timer */