scsi: qla2xxx: Serialize GPNID for multiple RSCN
GPNID is triggered by RSCN. For multiple RSCNs of the same affected
NPORT ID, serialize the GPNID to prevent confusion.
Fixes: 726b854870 ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
25ad76b703
commit
2d73ac6102
@@ -315,6 +315,29 @@ struct srb_cmd {
|
||||
/* To identify if a srb is of T10-CRC type. @sp => srb_t pointer */
|
||||
#define IS_PROT_IO(sp) (sp->flags & SRB_CRC_CTX_DSD_VALID)
|
||||
|
||||
/*
|
||||
* 24 bit port ID type definition.
|
||||
*/
|
||||
typedef union {
|
||||
uint32_t b24 : 24;
|
||||
|
||||
struct {
|
||||
#ifdef __BIG_ENDIAN
|
||||
uint8_t domain;
|
||||
uint8_t area;
|
||||
uint8_t al_pa;
|
||||
#elif defined(__LITTLE_ENDIAN)
|
||||
uint8_t al_pa;
|
||||
uint8_t area;
|
||||
uint8_t domain;
|
||||
#else
|
||||
#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
|
||||
#endif
|
||||
uint8_t rsvd_1;
|
||||
} b;
|
||||
} port_id_t;
|
||||
#define INVALID_PORT_ID 0xFFFFFF
|
||||
|
||||
struct els_logo_payload {
|
||||
uint8_t opcode;
|
||||
uint8_t rsvd[3];
|
||||
@@ -338,6 +361,7 @@ struct ct_arg {
|
||||
u32 rsp_size;
|
||||
void *req;
|
||||
void *rsp;
|
||||
port_id_t id;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -499,6 +523,7 @@ typedef struct srb {
|
||||
const char *name;
|
||||
int iocbs;
|
||||
struct qla_qpair *qpair;
|
||||
struct list_head elem;
|
||||
u32 gen1; /* scratch */
|
||||
u32 gen2; /* scratch */
|
||||
union {
|
||||
@@ -2164,28 +2189,6 @@ struct imm_ntfy_from_isp {
|
||||
#define REQUEST_ENTRY_SIZE (sizeof(request_t))
|
||||
|
||||
|
||||
/*
|
||||
* 24 bit port ID type definition.
|
||||
*/
|
||||
typedef union {
|
||||
uint32_t b24 : 24;
|
||||
|
||||
struct {
|
||||
#ifdef __BIG_ENDIAN
|
||||
uint8_t domain;
|
||||
uint8_t area;
|
||||
uint8_t al_pa;
|
||||
#elif defined(__LITTLE_ENDIAN)
|
||||
uint8_t al_pa;
|
||||
uint8_t area;
|
||||
uint8_t domain;
|
||||
#else
|
||||
#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"
|
||||
#endif
|
||||
uint8_t rsvd_1;
|
||||
} b;
|
||||
} port_id_t;
|
||||
#define INVALID_PORT_ID 0xFFFFFF
|
||||
|
||||
/*
|
||||
* Switch info gathering structure.
|
||||
@@ -4252,6 +4255,7 @@ typedef struct scsi_qla_host {
|
||||
uint8_t n2n_node_name[WWN_SIZE];
|
||||
uint8_t n2n_port_name[WWN_SIZE];
|
||||
uint16_t n2n_id;
|
||||
struct list_head gpnid_list;
|
||||
} scsi_qla_host_t;
|
||||
|
||||
struct qla27xx_image_status {
|
||||
|
||||
Reference in New Issue
Block a user