diff mbox series

[GIT,PULL] SCSI fixes for 6.0-rc4

Message ID d70b92ce5eb5b50b1a0975e8b3b21b9f48809ad8.camel@HansenPartnership.com
State New
Headers show
Series [GIT,PULL] SCSI fixes for 6.0-rc4 | expand

Commit Message

James Bottomley Nov. 12, 2022, 3:02 p.m. UTC
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.

The patch is available here:

git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes

The short changelog is:

Bart Van Assche (1):
      scsi: scsi_debug: Make the READ CAPACITY response compliant with ZBC

Brian King (1):
      scsi: ibmvfc: Avoid path failures during live migration

Yang Yingliang (1):
      scsi: scsi_transport_sas: Fix error handling in sas_phy_add()

And the diffstat:

 drivers/scsi/ibmvscsi/ibmvfc.c    | 14 +++++++++++---
 drivers/scsi/scsi_debug.c         |  7 +++++++
 drivers/scsi/scsi_transport_sas.c | 13 +++++++++----
 3 files changed, 27 insertions(+), 7 deletions(-)

With full diff below.

James

---
diff mbox series

Patch

diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c
b/drivers/scsi/ibmvscsi/ibmvfc.c
index 00684e11976b..1a0c0b7289d2 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -708,8 +708,13 @@  static void ibmvfc_init_host(struct ibmvfc_host
*vhost)
 		memset(vhost->async_crq.msgs.async, 0, PAGE_SIZE);
 		vhost->async_crq.cur = 0;
 
-		list_for_each_entry(tgt, &vhost->targets, queue)
-			ibmvfc_del_tgt(tgt);
+		list_for_each_entry(tgt, &vhost->targets, queue) {
+			if (vhost->client_migrated)
+				tgt->need_login = 1;
+			else
+				ibmvfc_del_tgt(tgt);
+		}
+
 		scsi_block_requests(vhost->host);
 		ibmvfc_set_host_action(vhost,
IBMVFC_HOST_ACTION_INIT);
 		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 */
 			dev_info(vhost->dev, "Partition migrated, Re-
enabling adapter\n");
 			vhost->client_migrated = 1;
+
+			scsi_block_requests(vhost->host);
 			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);
+			wake_up(&vhost->work_wait_q);
 		} 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);
 			ibmvfc_purge_requests(vhost, DID_ERROR);
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 697fc57bc711..629853662b82 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -1899,6 +1899,13 @@  static int resp_readcap16(struct scsi_cmnd *scp,
 			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;
 
 	if (have_dif_prot) {
diff --git a/drivers/scsi/scsi_transport_sas.c
b/drivers/scsi/scsi_transport_sas.c
index 2f88c61216ee..74b99f2b0b74 100644
--- a/drivers/scsi/scsi_transport_sas.c
+++ b/drivers/scsi/scsi_transport_sas.c
@@ -722,12 +722,17 @@  int sas_phy_add(struct sas_phy *phy)
 	int error;
 
 	error = device_add(&phy->dev);
-	if (!error) {
-		transport_add_device(&phy->dev);
-		transport_configure_device(&phy->dev);
+	if (error)
+		return error;
+
+	error = transport_add_device(&phy->dev);
+	if (error) {
+		device_del(&phy->dev);
+		return error;
 	}
+	transport_configure_device(&phy->dev);
 
-	return error;
+	return 0;
 }
 EXPORT_SYMBOL(sas_phy_add);