mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-20 00:11:22 +00:00
[SCSI] zfcp: Correctly query end flag in gpn_ft response
When the last port entry in the gpn_ft response is already a known port, the eval function would skip the end flag and try to attach ports with wwpn 0. Fix this by checking the flag first. Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: Martin Petermann <martin@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
d453881728
commit
47f7bba52b
@ -475,7 +475,7 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft)
|
|||||||
struct zfcp_adapter *adapter = ct->port->adapter;
|
struct zfcp_adapter *adapter = ct->port->adapter;
|
||||||
struct zfcp_port *port, *tmp;
|
struct zfcp_port *port, *tmp;
|
||||||
u32 d_id;
|
u32 d_id;
|
||||||
int ret = 0, x;
|
int ret = 0, x, last = 0;
|
||||||
|
|
||||||
if (ct->status)
|
if (ct->status)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -492,12 +492,13 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft)
|
|||||||
down(&zfcp_data.config_sema);
|
down(&zfcp_data.config_sema);
|
||||||
|
|
||||||
/* first entry is the header */
|
/* first entry is the header */
|
||||||
for (x = 1; x < ZFCP_GPN_FT_MAX_ENTRIES; x++) {
|
for (x = 1; x < ZFCP_GPN_FT_MAX_ENTRIES && !last; x++) {
|
||||||
if (x % (ZFCP_GPN_FT_ENTRIES + 1))
|
if (x % (ZFCP_GPN_FT_ENTRIES + 1))
|
||||||
acc++;
|
acc++;
|
||||||
else
|
else
|
||||||
acc = sg_virt(++sg);
|
acc = sg_virt(++sg);
|
||||||
|
|
||||||
|
last = acc->control & 0x80;
|
||||||
d_id = acc->port_id[0] << 16 | acc->port_id[1] << 8 |
|
d_id = acc->port_id[0] << 16 | acc->port_id[1] << 8 |
|
||||||
acc->port_id[2];
|
acc->port_id[2];
|
||||||
|
|
||||||
@ -513,8 +514,6 @@ static int zfcp_scan_eval_gpn_ft(struct zfcp_gpn_ft *gpn_ft)
|
|||||||
ret = PTR_ERR(port);
|
ret = PTR_ERR(port);
|
||||||
else
|
else
|
||||||
zfcp_erp_port_reopen(port, 0, 149, NULL);
|
zfcp_erp_port_reopen(port, 0, 149, NULL);
|
||||||
if (acc->control & 0x80) /* last entry */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zfcp_erp_wait(adapter);
|
zfcp_erp_wait(adapter);
|
||||||
|
Loading…
Reference in New Issue
Block a user