diff options
author | Robert Love <robert.w.love@intel.com> | 2012-05-22 22:06:10 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-23 04:36:27 -0400 |
commit | 619fe4bed415e5d8a4749937f42b6a8a9031d4aa (patch) | |
tree | 8b52f6fd4b2ba58ef898f628aba8ab49111e1aa8 /drivers/scsi/fcoe/fcoe.h | |
parent | b7e94a1686c5daef4f649f7f4f839cc294f07710 (diff) |
[SCSI] fcoe: Allocate fcoe_ctlr with fcoe_interface, not as a member
Currently the fcoe_ctlr associated with an interface is allocated
as a member of struct fcoe_interface. This causes problems when
attempting to use the new fcoe_sysfs APIs which allow us to allocate
the fcoe_interface as private data to the fcoe_ctlr_device instance.
The problem is that libfcoe wants to be able use pointer math to find a
fcoe_ctlr's fcoe_ctlr_device as well as finding a fcoe_ctlr_device's
assocated fcoe_ctlr. To do this we need to allocate the
fcoe_ctlr_device, with private data for the LLD. The private data
contains the fcoe_ctlr and its private data is the fcoe_interface.
This patch only allocates the fcoe_interface with the fcoe_ctlr, the
fcoe_ctlr_device will be added in a later patch, which will complete
the below diagram-
+------------------+
| fcoe_ctlr_device |
+------------------+
| fcoe_ctlr |
+------------------+
| fcoe_interface |
+------------------+
This prep work will allow us to go from a fcoe_ctlr_device instance
to its fcoe_ctlr as well as from a fcoe_ctlr to its fcoe_ctlr_device
once the fcoe_sysfs API is in use (later patches in this series).
Signed-off-by: Robert Love <robert.w.love@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/fcoe/fcoe.h')
-rw-r--r-- | drivers/scsi/fcoe/fcoe.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/scsi/fcoe/fcoe.h b/drivers/scsi/fcoe/fcoe.h index 96ac938d39cc..a624add4f8ec 100644 --- a/drivers/scsi/fcoe/fcoe.h +++ b/drivers/scsi/fcoe/fcoe.h | |||
@@ -68,7 +68,6 @@ do { \ | |||
68 | * @netdev: The associated net device | 68 | * @netdev: The associated net device |
69 | * @fcoe_packet_type: FCoE packet type | 69 | * @fcoe_packet_type: FCoE packet type |
70 | * @fip_packet_type: FIP packet type | 70 | * @fip_packet_type: FIP packet type |
71 | * @ctlr: The FCoE controller (for FIP) | ||
72 | * @oem: The offload exchange manager for all local port | 71 | * @oem: The offload exchange manager for all local port |
73 | * instances associated with this port | 72 | * instances associated with this port |
74 | * @removed: Indicates fcoe interface removed from net device | 73 | * @removed: Indicates fcoe interface removed from net device |
@@ -80,12 +79,15 @@ struct fcoe_interface { | |||
80 | struct net_device *realdev; | 79 | struct net_device *realdev; |
81 | struct packet_type fcoe_packet_type; | 80 | struct packet_type fcoe_packet_type; |
82 | struct packet_type fip_packet_type; | 81 | struct packet_type fip_packet_type; |
83 | struct fcoe_ctlr ctlr; | ||
84 | struct fc_exch_mgr *oem; | 82 | struct fc_exch_mgr *oem; |
85 | u8 removed; | 83 | u8 removed; |
86 | }; | 84 | }; |
87 | 85 | ||
88 | #define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr) | 86 | #define fcoe_to_ctlr(x) \ |
87 | (struct fcoe_ctlr *)(((struct fcoe_ctlr *)(x)) - 1) | ||
88 | |||
89 | #define fcoe_from_ctlr(x) \ | ||
90 | ((struct fcoe_interface *)((x) + 1)) | ||
89 | 91 | ||
90 | /** | 92 | /** |
91 | * fcoe_netdev() - Return the net device associated with a local port | 93 | * fcoe_netdev() - Return the net device associated with a local port |