scsi: scsi_transport_fc: Add dummy initiator role to rport
This patch allows scsi drivers that expose virturalized fibre channel devices but that do not expose rports to successfully rescan the scsi bus via echo "- - -" > /sys/class/scsi_host/hostX/scan. Drivers can create a pseudo rport and indicate FC_PORT_ROLE_FCP_DUMMY_INITIATOR as the rport's role in fc_rport_identifiers. This insures that a valid scsi_target_id is assigned to the newly created rport and it can meet the requirements of fc_user_scan_tgt calling scsi_scan_target. Signed-off-by: Cathy Avery <cavery@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
25d1d50e23
Коммит
0c3ae26647
|
@ -289,9 +289,10 @@ static const struct {
|
|||
u32 value;
|
||||
char *name;
|
||||
} fc_port_role_names[] = {
|
||||
{ FC_PORT_ROLE_FCP_TARGET, "FCP Target" },
|
||||
{ FC_PORT_ROLE_FCP_INITIATOR, "FCP Initiator" },
|
||||
{ FC_PORT_ROLE_IP_PORT, "IP Port" },
|
||||
{ FC_PORT_ROLE_FCP_TARGET, "FCP Target" },
|
||||
{ FC_PORT_ROLE_FCP_INITIATOR, "FCP Initiator" },
|
||||
{ FC_PORT_ROLE_IP_PORT, "IP Port" },
|
||||
{ FC_PORT_ROLE_FCP_DUMMY_INITIATOR, "FCP Dummy Initiator" },
|
||||
};
|
||||
fc_bitfield_name_search(port_roles, fc_port_role_names)
|
||||
|
||||
|
@ -2628,7 +2629,8 @@ fc_remote_port_create(struct Scsi_Host *shost, int channel,
|
|||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
|
||||
rport->number = fc_host->next_rport_number++;
|
||||
if (rport->roles & FC_PORT_ROLE_FCP_TARGET)
|
||||
if ((rport->roles & FC_PORT_ROLE_FCP_TARGET) ||
|
||||
(rport->roles & FC_PORT_ROLE_FCP_DUMMY_INITIATOR))
|
||||
rport->scsi_target_id = fc_host->next_target_id++;
|
||||
else
|
||||
rport->scsi_target_id = -1;
|
||||
|
|
|
@ -162,6 +162,7 @@ enum fc_tgtid_binding_type {
|
|||
#define FC_PORT_ROLE_FCP_TARGET 0x01
|
||||
#define FC_PORT_ROLE_FCP_INITIATOR 0x02
|
||||
#define FC_PORT_ROLE_IP_PORT 0x04
|
||||
#define FC_PORT_ROLE_FCP_DUMMY_INITIATOR 0x08
|
||||
|
||||
/* The following are for compatibility */
|
||||
#define FC_RPORT_ROLE_UNKNOWN FC_PORT_ROLE_UNKNOWN
|
||||
|
|
Загрузка…
Ссылка в новой задаче