Commit 2bce1a6d authored by Bart Van Assche's avatar Bart Van Assche Committed by Doug Ledford

IB/srpt: Accept GUIDs as port names

Port and ACL information must be configured before an initiator
logs in.  Make it possible to configure this information before
a subnet prefix has been assigned to a port by not only accepting
GIDs as target port and initiator port names but by also accepting
port GUIDs.

Add a 'priv' member to struct se_wwn to allow target drivers to
associate their own data with struct se_wwn.
Reported-by: default avatarDoug Ledford <dledford@redhat.com>
References: http://www.spinics.net/lists/linux-rdma/msg39505.htmlSigned-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent a3dd3a48
This diff is collapsed.
...@@ -258,6 +258,7 @@ enum rdma_ch_state { ...@@ -258,6 +258,7 @@ enum rdma_ch_state {
* against concurrent modification by the cm_id spinlock. * against concurrent modification by the cm_id spinlock.
* @sess: Session information associated with this SRP channel. * @sess: Session information associated with this SRP channel.
* @sess_name: Session name. * @sess_name: Session name.
* @ini_guid: Initiator port GUID.
* @release_work: Allows scheduling of srpt_release_channel(). * @release_work: Allows scheduling of srpt_release_channel().
* @release_done: Enables waiting for srpt_release_channel() completion. * @release_done: Enables waiting for srpt_release_channel() completion.
*/ */
...@@ -284,6 +285,7 @@ struct srpt_rdma_ch { ...@@ -284,6 +285,7 @@ struct srpt_rdma_ch {
struct list_head cmd_wait_list; struct list_head cmd_wait_list;
struct se_session *sess; struct se_session *sess;
u8 sess_name[36]; u8 sess_name[36];
u8 ini_guid[24];
struct work_struct release_work; struct work_struct release_work;
struct completion *release_done; struct completion *release_done;
}; };
...@@ -306,28 +308,34 @@ struct srpt_port_attrib { ...@@ -306,28 +308,34 @@ struct srpt_port_attrib {
* @mad_agent: per-port management datagram processing information. * @mad_agent: per-port management datagram processing information.
* @enabled: Whether or not this target port is enabled. * @enabled: Whether or not this target port is enabled.
* @port_guid: ASCII representation of Port GUID * @port_guid: ASCII representation of Port GUID
* @port_gid: ASCII representation of Port GID
* @port: one-based port number. * @port: one-based port number.
* @sm_lid: cached value of the port's sm_lid. * @sm_lid: cached value of the port's sm_lid.
* @lid: cached value of the port's lid. * @lid: cached value of the port's lid.
* @gid: cached value of the port's gid. * @gid: cached value of the port's gid.
* @port_acl_lock spinlock for port_acl_list: * @port_acl_lock spinlock for port_acl_list:
* @work: work structure for refreshing the aforementioned cached values. * @work: work structure for refreshing the aforementioned cached values.
* @port_tpg_1 Target portal group = 1 data. * @port_guid_tpg: TPG associated with target port GUID.
* @port_wwn: Target core WWN data. * @port_guid_wwn: WWN associated with target port GUID.
* @port_gid_tpg: TPG associated with target port GID.
* @port_gid_wwn: WWN associated with target port GID.
* @port_acl_list: Head of the list with all node ACLs for this port. * @port_acl_list: Head of the list with all node ACLs for this port.
*/ */
struct srpt_port { struct srpt_port {
struct srpt_device *sdev; struct srpt_device *sdev;
struct ib_mad_agent *mad_agent; struct ib_mad_agent *mad_agent;
bool enabled; bool enabled;
u8 port_guid[64]; u8 port_guid[24];
u8 port_gid[64];
u8 port; u8 port;
u16 sm_lid; u16 sm_lid;
u16 lid; u16 lid;
union ib_gid gid; union ib_gid gid;
struct work_struct work; struct work_struct work;
struct se_portal_group port_tpg_1; struct se_portal_group port_guid_tpg;
struct se_wwn port_wwn; struct se_wwn port_guid_wwn;
struct se_portal_group port_gid_tpg;
struct se_wwn port_gid_wwn;
struct srpt_port_attrib port_attrib; struct srpt_port_attrib port_attrib;
}; };
......
...@@ -448,6 +448,7 @@ static void core_tpg_lun_ref_release(struct percpu_ref *ref) ...@@ -448,6 +448,7 @@ static void core_tpg_lun_ref_release(struct percpu_ref *ref)
complete(&lun->lun_ref_comp); complete(&lun->lun_ref_comp);
} }
/* Does not change se_wwn->priv. */
int core_tpg_register( int core_tpg_register(
struct se_wwn *se_wwn, struct se_wwn *se_wwn,
struct se_portal_group *se_tpg, struct se_portal_group *se_tpg,
......
...@@ -909,6 +909,7 @@ static inline struct se_portal_group *param_to_tpg(struct config_item *item) ...@@ -909,6 +909,7 @@ static inline struct se_portal_group *param_to_tpg(struct config_item *item)
struct se_wwn { struct se_wwn {
struct target_fabric_configfs *wwn_tf; struct target_fabric_configfs *wwn_tf;
void *priv;
struct config_group wwn_group; struct config_group wwn_group;
struct config_group fabric_stat_group; struct config_group fabric_stat_group;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment