History

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley: "All fixes for drivers. The core change in the error handler is simply to translate an ALUA specific sense code into a retry the ALUA components can handle and won't impact any other devices" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: error: alua: I/O errors for ALUA state transitions scsi: storvsc: Increase the timeouts to storvsc_timeout scsi: s390: zfcp: Ensure synchronous unit_add scsi: iscsi: Fix incorrect error path labels for flashnode operations scsi: mvsas: Fix typos in per-phy comments and SAS cmd port registers scsi: core: ufs: Fix a hang in the error handler

Linus Torvalds committed 1 year ago

Commit 4774cfe2 parents 25294cb 5c3ba816 files · +23 −14Browse files

Unified · Split

6 files
  1. drivers/s390/scsi/zfcp_sysfs.c +2 −0
  2. drivers/scsi/mvsas/mv_defs.h +2 −2
  3. drivers/scsi/scsi_error.c +2 −1
  4. drivers/scsi/scsi_transport_iscsi.c +5 −6
  5. drivers/scsi/storvsc_drv.c +6 −4
  6. drivers/ufs/core/ufshcd.c +6 −1
drivers/s390/scsi/zfcp_sysfs.c+2−0
@@ -449,6 +449,8 @@ static ssize_t zfcp_sysfs_unit_add_store(struct device *dev, · 448 unmodified lines
449449 if (kstrtoull(buf, 0, (unsigned long long *) &fcp_lun))
450450 return -EINVAL;
451451
452+ flush_work(&port->rport_work);
453+
452454 retval = zfcp_unit_add(port, fcp_lun);
453455 if (retval)
454456 return retval;
drivers/scsi/mvsas/mv_defs.h+2−2
@@ -215,7 +215,7 @@ enum hw_register_bits { · 214 unmodified lines
215215
216216 /* MVS_Px_INT_STAT, MVS_Px_INT_MASK (per-phy events) */
217217 PHYEV_DEC_ERR = (1U << 24), /* Phy Decoding Error */
218− PHYEV_DCDR_ERR = (1U << 23), /* STP Deocder Error */
218+ PHYEV_DCDR_ERR = (1U << 23), /* STP Decoder Error */
219219 PHYEV_CRC_ERR = (1U << 22), /* STP CRC Error */
220220 PHYEV_UNASSOC_FIS = (1U << 19), /* unassociated FIS rx'd */
221221 PHYEV_AN = (1U << 18), /* SATA async notification */
@@ -347,7 +347,7 @@ enum sas_cmd_port_registers { · 125 unmodified lines
347347 CMD_SATA_PORT_MEM_CTL0 = 0x158, /* SATA Port Memory Control 0 */
348348 CMD_SATA_PORT_MEM_CTL1 = 0x15c, /* SATA Port Memory Control 1 */
349349 CMD_XOR_MEM_BIST_CTL = 0x160, /* XOR Memory BIST Control */
350− CMD_XOR_MEM_BIST_STAT = 0x164, /* XOR Memroy BIST Status */
350+ CMD_XOR_MEM_BIST_STAT = 0x164, /* XOR Memory BIST Status */
351351 CMD_DMA_MEM_BIST_CTL = 0x168, /* DMA Memory BIST Control */
352352 CMD_DMA_MEM_BIST_STAT = 0x16c, /* DMA Memory BIST Status */
353353 CMD_PORT_MEM_BIST_CTL = 0x170, /* Port Memory BIST Control */
drivers/scsi/scsi_error.c+2−1
@@ -665,7 +665,8 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd) · 664 unmodified lines
665665 * if the device is in the process of becoming ready, we
666666 * should retry.
667667 */
668− if ((sshdr.asc == 0x04) && (sshdr.ascq == 0x01))
668+ if ((sshdr.asc == 0x04) &&
669+ (sshdr.ascq == 0x01 || sshdr.ascq == 0x0a))
669670 return NEEDS_RETRY;
670671 /*
671672 * if the device is not started, we need to wake
drivers/scsi/scsi_transport_iscsi.c+5−6
@@ -3499,7 +3499,7 @@ static int iscsi_new_flashnode(struct iscsi_transport *transport, · 3498 unmodified lines
34993499 pr_err("%s could not find host no %u\n",
35003500 __func__, ev->u.new_flashnode.host_no);
35013501 err = -ENODEV;
3502− goto put_host;
3502+ goto exit_new_fnode;
35033503 }
35043504
35053505 index = transport->new_flashnode(shost, data, len);
@@ -3509,7 +3509,6 @@ static int iscsi_new_flashnode(struct iscsi_transport *transport, · 3 unmodified lines
35093509 else
35103510 err = -EIO;
35113511
3512−put_host:
35133512 scsi_host_put(shost);
35143513
35153514 exit_new_fnode:
@@ -3534,7 +3533,7 @@ static int iscsi_del_flashnode(struct iscsi_transport *transport, · 18 unmodified lines
35343533 pr_err("%s could not find host no %u\n",
35353534 __func__, ev->u.del_flashnode.host_no);
35363535 err = -ENODEV;
3537− goto put_host;
3536+ goto exit_del_fnode;
35383537 }
35393538
35403539 idx = ev->u.del_flashnode.flashnode_idx;
@@ -3576,7 +3575,7 @@ static int iscsi_login_flashnode(struct iscsi_transport *transport, · 35 unmodified lines
35763575 pr_err("%s could not find host no %u\n",
35773576 __func__, ev->u.login_flashnode.host_no);
35783577 err = -ENODEV;
3579− goto put_host;
3578+ goto exit_login_fnode;
35803579 }
35813580
35823581 idx = ev->u.login_flashnode.flashnode_idx;
@@ -3628,7 +3627,7 @@ static int iscsi_logout_flashnode(struct iscsi_transport *transport, · 45 unmodified lines
36283627 pr_err("%s could not find host no %u\n",
36293628 __func__, ev->u.logout_flashnode.host_no);
36303629 err = -ENODEV;
3631− goto put_host;
3630+ goto exit_logout_fnode;
36323631 }
36333632
36343633 idx = ev->u.logout_flashnode.flashnode_idx;
@@ -3678,7 +3677,7 @@ static int iscsi_logout_flashnode_sid(struct iscsi_transport *transport, · 43 unmodified lines
36783677 pr_err("%s could not find host no %u\n",
36793678 __func__, ev->u.logout_flashnode.host_no);
36803679 err = -ENODEV;
3681− goto put_host;
3680+ goto exit_logout_sid;
36823681 }
36833682
36843683 session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid);
drivers/scsi/storvsc_drv.c+6−4
@@ -362,7 +362,7 @@ MODULE_PARM_DESC(ring_avail_percent_lowater, · 361 unmodified lines
362362 /*
363363 * Timeout in seconds for all devices managed by this driver.
364364 */
365−static int storvsc_timeout = 180;
365+static const int storvsc_timeout = 180;
366366
367367 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
368368 static struct scsi_transport_template *fc_transport_template;
@@ -768,7 +768,7 @@ static void handle_multichannel_storage(struct hv_device *device, int max_chns) · 399 unmodified lines
768768 return;
769769 }
770770
771− t = wait_for_completion_timeout(&request->wait_event, 10*HZ);
771+ t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
772772 if (t == 0) {
773773 dev_err(dev, "Failed to create sub-channel: timed out\n");
774774 return;
@@ -833,7 +833,7 @@ static int storvsc_execute_vstor_op(struct hv_device *device, · 58 unmodified lines
833833 if (ret != 0)
834834 return ret;
835835
836− t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
836+ t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
837837 if (t == 0)
838838 return -ETIMEDOUT;
839839
@@ -1350,6 +1350,8 @@ static int storvsc_connect_to_vsp(struct hv_device *device, u32 ring_size, · 510 unmodified lines
13501350 return ret;
13511351
13521352 ret = storvsc_channel_init(device, is_fc);
1353+ if (ret)
1354+ vmbus_close(device->channel);
13531355
13541356 return ret;
13551357 }
@@ -1668,7 +1670,7 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd) · 312 unmodified lines
16681670 if (ret != 0)
16691671 return FAILED;
16701672
1671− t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
1673+ t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
16721674 if (t == 0)
16731675 return TIMEOUT_ERROR;
16741676
drivers/ufs/core/ufshcd.c+6−1
@@ -6623,9 +6623,14 @@ static void ufshcd_err_handler(struct work_struct *work) · 6622 unmodified lines
66236623 up(&hba->host_sem);
66246624 return;
66256625 }
6626− ufshcd_set_eh_in_progress(hba);
66276626 spin_unlock_irqrestore(hba->host->host_lock, flags);
6627+
66286628 ufshcd_err_handling_prepare(hba);
6629+
6630+ spin_lock_irqsave(hba->host->host_lock, flags);
6631+ ufshcd_set_eh_in_progress(hba);
6632+ spin_unlock_irqrestore(hba->host->host_lock, flags);
6633+
66296634 /* Complete requests that have door-bell cleared by h/w */
66306635 ufshcd_complete_requests(hba, false);
66316636 spin_lock_irqsave(hba->host->host_lock, flags);