forked from Minki/linux
SCSI fixes on 20221112
Three small fixes, all in drivers. The sas one is in an unlikely error leg, the debug one is to make it more standards conformant and the ibmvfc one is to fix a user visible bug where a failover could lose all paths to the device. Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCY2+0+iYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishXfTAQCxqdCV jb6MSs0IqB/EtTWYhq6znt6Tz4f544+esrtn+wEAxD5G8+6p7hbKi9GzPz4vLke4 sTT3xTOd4I2iLaaM3p0= =v1jf -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "Three small fixes, all in drivers. The sas one is in an unlikely error leg, the debug one is to make it more standards conformant and the ibmvfc one is to fix a user visible bug where a failover could lose all paths to the device" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: scsi_debug: Make the READ CAPACITY response compliant with ZBC scsi: scsi_transport_sas: Fix error handling in sas_phy_add() scsi: ibmvfc: Avoid path failures during live migration
This commit is contained in:
commit
fef7fd4892
@ -708,8 +708,13 @@ static void ibmvfc_init_host(struct ibmvfc_host *vhost)
|
|||||||
memset(vhost->async_crq.msgs.async, 0, PAGE_SIZE);
|
memset(vhost->async_crq.msgs.async, 0, PAGE_SIZE);
|
||||||
vhost->async_crq.cur = 0;
|
vhost->async_crq.cur = 0;
|
||||||
|
|
||||||
list_for_each_entry(tgt, &vhost->targets, queue)
|
list_for_each_entry(tgt, &vhost->targets, queue) {
|
||||||
ibmvfc_del_tgt(tgt);
|
if (vhost->client_migrated)
|
||||||
|
tgt->need_login = 1;
|
||||||
|
else
|
||||||
|
ibmvfc_del_tgt(tgt);
|
||||||
|
}
|
||||||
|
|
||||||
scsi_block_requests(vhost->host);
|
scsi_block_requests(vhost->host);
|
||||||
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
|
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
|
||||||
vhost->job_step = ibmvfc_npiv_login;
|
vhost->job_step = ibmvfc_npiv_login;
|
||||||
@ -3235,9 +3240,12 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost,
|
|||||||
/* We need to re-setup the interpartition connection */
|
/* We need to re-setup the interpartition connection */
|
||||||
dev_info(vhost->dev, "Partition migrated, Re-enabling adapter\n");
|
dev_info(vhost->dev, "Partition migrated, Re-enabling adapter\n");
|
||||||
vhost->client_migrated = 1;
|
vhost->client_migrated = 1;
|
||||||
|
|
||||||
|
scsi_block_requests(vhost->host);
|
||||||
ibmvfc_purge_requests(vhost, DID_REQUEUE);
|
ibmvfc_purge_requests(vhost, DID_REQUEUE);
|
||||||
ibmvfc_link_down(vhost, IBMVFC_LINK_DOWN);
|
ibmvfc_set_host_state(vhost, IBMVFC_LINK_DOWN);
|
||||||
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_REENABLE);
|
ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_REENABLE);
|
||||||
|
wake_up(&vhost->work_wait_q);
|
||||||
} else if (crq->format == IBMVFC_PARTNER_FAILED || crq->format == IBMVFC_PARTNER_DEREGISTER) {
|
} else if (crq->format == IBMVFC_PARTNER_FAILED || crq->format == IBMVFC_PARTNER_DEREGISTER) {
|
||||||
dev_err(vhost->dev, "Host partner adapter deregistered or failed (rc=%d)\n", crq->format);
|
dev_err(vhost->dev, "Host partner adapter deregistered or failed (rc=%d)\n", crq->format);
|
||||||
ibmvfc_purge_requests(vhost, DID_ERROR);
|
ibmvfc_purge_requests(vhost, DID_ERROR);
|
||||||
|
@ -1899,6 +1899,13 @@ static int resp_readcap16(struct scsi_cmnd *scp,
|
|||||||
arr[14] |= 0x40;
|
arr[14] |= 0x40;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since the scsi_debug READ CAPACITY implementation always reports the
|
||||||
|
* total disk capacity, set RC BASIS = 1 for host-managed ZBC devices.
|
||||||
|
*/
|
||||||
|
if (devip->zmodel == BLK_ZONED_HM)
|
||||||
|
arr[12] |= 1 << 4;
|
||||||
|
|
||||||
arr[15] = sdebug_lowest_aligned & 0xff;
|
arr[15] = sdebug_lowest_aligned & 0xff;
|
||||||
|
|
||||||
if (have_dif_prot) {
|
if (have_dif_prot) {
|
||||||
|
@ -722,12 +722,17 @@ int sas_phy_add(struct sas_phy *phy)
|
|||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = device_add(&phy->dev);
|
error = device_add(&phy->dev);
|
||||||
if (!error) {
|
if (error)
|
||||||
transport_add_device(&phy->dev);
|
return error;
|
||||||
transport_configure_device(&phy->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return error;
|
error = transport_add_device(&phy->dev);
|
||||||
|
if (error) {
|
||||||
|
device_del(&phy->dev);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
transport_configure_device(&phy->dev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(sas_phy_add);
|
EXPORT_SYMBOL(sas_phy_add);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user