SCSI fixes for 5.4-rc4
Subsystems (5)
James Bottomley
maintainerNine changes, eight to drivers (qla2xxx, hpsa, lpfc, alua, ch, 53c710[x2], target) and one core change that tries to close a race between sysfs delete and module removal.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Allen Pais (1):
scsi: qla2xxx: fix a potential NULL pointer dereference
Bart Van Assche (1):
scsi: ch: Make it possible to open a ch device multiple times again
Bodo Stroesser (1):
scsi: target: core: Do not overwrite CDB byte 1
Don Brace (1):
scsi: hpsa: add missing hunks in reset-patch
Hannes Reinecke (2):
scsi: lpfc: remove left-over BUILD_NVME defines
scsi: scsi_dh_alua: handle RTPG sense code correctly during state transitions
Thomas Bogendoerfer (2):
scsi: fix kconfig dependency warning related to 53C700_LE_ON_BE
scsi: sni_53c710: fix compilation error
Yufen Yu (1):
scsi: core: try to get module before removing device
And the diffstat:
drivers/scsi/Kconfig | 2 +- drivers/scsi/ch.c | 1 - drivers/scsi/device_handler/scsi_dh_alua.c | 21 ++++++++++++++++----- drivers/scsi/hpsa.c | 4 ++++ drivers/scsi/lpfc/lpfc_init.c | 2 -- drivers/scsi/lpfc/lpfc_scsi.c | 2 -- drivers/scsi/qla2xxx/qla_os.c | 4 ++++ drivers/scsi/scsi_sysfs.c | 11 ++++++++++- drivers/scsi/sni_53c710.c | 4 +--- drivers/target/target_core_device.c | 21 --------------------- 10 files changed, 36 insertions(+), 36 deletions(-)
With full diff below.
James
---
drivers/scsi/Kconfig +1 -1
@@ -898,7 +898,7 @@ config SCSI_SNI_53C710 config 53C700_LE_ON_BE bool - depends on SCSI_LASI700 + depends on SCSI_LASI700 || SCSI_SNI_53C710 default y config SCSI_STEX
drivers/scsi/ch.c +0 -1
@@ -579,7 +579,6 @@ ch_release(struct inode *inode, struct file *file)scsi_changer *ch = file->private_data;scsi_device_put (ch->device); - ch->device =NULL ; file->private_data =NULL ;kref_put (&ch->ref, ch_destroy);return 0 ;
drivers/scsi/device_handler/scsi_dh_alua.c +16 -5
@@ -511,6 +511,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)unsigned int tpg_desc_tbl_off;unsigned char orig_transition_tmo;unsigned long flags; +bool transitioning_sense = false;if (!pg->expiry) {unsigned long transition_tmo =ALUA_FAILOVER_TIMEOUT *HZ ;
@@ -571,13 +572,19 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg) goto retry; }/* -* Retry on ALUA state transition or if any -* UNIT ATTENTION occurred. +* If the array returns with 'ALUA state transition' +* sense code here it cannot return RTPG data during +* transition. So set the state to 'transitioning' directly. */ if (sense_hdr.sense_key ==NOT_READY && - sense_hdr.asc ==0x04 && sense_hdr.ascq ==0x0a ) - err =SCSI_DH_RETRY ; -else if (sense_hdr.sense_key ==UNIT_ATTENTION ) + sense_hdr.asc ==0x04 && sense_hdr.ascq ==0x0a ) { + transitioning_sense = true; + goto skip_rtpg; + } +/* +* Retry on any other UNIT ATTENTION occurred. +*/ +if (sense_hdr.sense_key ==UNIT_ATTENTION ) err =SCSI_DH_RETRY ;if (err ==SCSI_DH_RETRY && pg->expiry !=0 &&time_before (jiffies, pg->expiry)) {
@@ -665,7 +672,11 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg) off =8 + (desc[7 ] *4 ); } + skip_rtpg:spin_lock_irqsave (&pg->lock, flags); +if (transitioning_sense) + pg->state =SCSI_ACCESS_STATE_TRANSITIONING ; + sdev_printk(KERN_INFO, sdev, "%s: port group %02x state %c %s supports %c%c%c%c%c%c%c\n", ALUA_DH_NAME, pg->group_id, print_alua_state(pg->state),
drivers/scsi/hpsa.c +4 -0
@@ -5474,6 +5474,8 @@ static int hpsa_ciss_submit(struct ctlr_info *h,return SCSI_MLQUEUE_HOST_BUSY ; } + c->device = dev; +enqueue_cmd_and_start_io (h, c);/* the cmd'll come back via intr handler in complete_scsi_command() */ return 0 ;
@@ -5545,6 +5547,7 @@ static int hpsa_ioaccel_submit(struct ctlr_info *h,hpsa_cmd_init (h, c->cmdindex, c); c->cmd_type =CMD_SCSI ; c->scsi_cmd = cmd; + c->device = dev; rc =hpsa_scsi_ioaccel_raid_map (h, c);if (rc <0 )/* scsi_dma_map failed. */ rc =SCSI_MLQUEUE_HOST_BUSY ;
@@ -5552,6 +5555,7 @@ static int hpsa_ioaccel_submit(struct ctlr_info *h,hpsa_cmd_init (h, c->cmdindex, c); c->cmd_type =CMD_SCSI ; c->scsi_cmd = cmd; + c->device = dev; rc =hpsa_scsi_ioaccel_direct_map (h, c);if (rc <0 )/* scsi_dma_map failed. */ rc =SCSI_MLQUEUE_HOST_BUSY ;
drivers/scsi/lpfc/lpfc_init.c +0 -2
@@ -9053,7 +9053,6 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba) } } -#if defined(BUILD_NVME )/* Clear NVME stats */ if (phba->cfg_enable_fc4_type &LPFC_ENABLE_NVME ) {for (idx =0 ; idx < phba->cfg_hdw_queue; idx++) {
@@ -9061,7 +9060,6 @@ lpfc_sli4_queue_create(struct lpfc_hba *phba) sizeof(phba->sli4_hba.hdwq[idx].nvme_cstat)); } } -#endif /* Clear SCSI stats */ if (phba->cfg_enable_fc4_type &LPFC_ENABLE_FCP ) {
drivers/scsi/lpfc/lpfc_scsi.c +0 -2
@@ -528,7 +528,6 @@ lpfc_sli4_io_xri_aborted(struct lpfc_hba *phba,list_del_init (&psb->list); psb->exch_busy =0 ; psb->status =IOSTAT_SUCCESS ; -#ifdef BUILD_NVME if (psb->cur_iocbq.iocb_flag ==LPFC_IO_NVME ) { qp->abts_nvme_io_bufs--;spin_unlock (&qp->abts_io_buf_list_lock);
@@ -536,7 +535,6 @@ lpfc_sli4_io_xri_aborted(struct lpfc_hba *phba,lpfc_sli4_nvme_xri_aborted (phba, axri, psb);return ; } -#endif qp->abts_scsi_io_bufs--;spin_unlock (&qp->abts_io_buf_list_lock);
drivers/scsi/qla2xxx/qla_os.c +4 -0
@@ -3224,6 +3224,10 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) req->req_q_in, req->req_q_out, rsp->rsp_q_in, rsp->rsp_q_out); ha->wq =alloc_workqueue ("qla2xxx_wq" ,0 ,0 ); +if (unlikely (!ha->wq)) { + ret = -ENOMEM ; + goto probe_failed; + }if (ha->isp_ops->initialize_adapter (base_vha)) { ql_log(ql_log_fatal, base_vha, 0x00d6,
drivers/scsi/scsi_sysfs.c +10 -1
@@ -730,6 +730,14 @@ sdev_store_delete(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {struct kernfs_node *kn; +struct scsi_device *sdev =to_scsi_device (dev); + +/* +* We need to try to get module, avoiding the module been removed +* during delete. +*/ +if (scsi_device_get (sdev)) +return -ENODEV ; kn =sysfs_break_active_protection (&dev->kobj, &attr->attr);WARN_ON_ONCE (!kn);
@@ -744,9 +752,10 @@ sdev_store_delete(struct device *dev, struct device_attribute *attr,* state into SDEV_DEL. */ device_remove_file (dev, attr); -scsi_remove_device (to_scsi_device (dev)); +scsi_remove_device (sdev);if (kn)sysfs_unbreak_active_protection (kn); +scsi_device_put (sdev);return count; }; static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
drivers/scsi/sni_53c710.c +1 -3
@@ -66,10 +66,8 @@ static int snirm710_probe(struct platform_device *dev) base = res->start; hostdata =kzalloc (sizeof (*hostdata),GFP_KERNEL ); -if (!hostdata) { -dev_printk (KERN_ERR , dev,"Failed to allocate host data\n" ); +if (!hostdata)return -ENOMEM ; - } hostdata->dev = &dev->dev;dma_set_mask (&dev->dev,DMA_BIT_MASK (32 ));
drivers/target/target_core_device.c +0 -21
@@ -1074,27 +1074,6 @@ passthrough_parse_cdb(struct se_cmd *cmd,struct se_device *dev = cmd->se_dev;unsigned int size; -/* -* Clear a lun set in the cdb if the initiator talking to use spoke -* and old standards version, as we can't assume the underlying device -* won't choke up on it. -*/ -switch (cdb[0 ]) { -case READ_10 :/* SBC - RDProtect */ -case READ_12 :/* SBC - RDProtect */ -case READ_16 :/* SBC - RDProtect */ -case SEND_DIAGNOSTIC :/* SPC - SELF-TEST Code */ -case VERIFY :/* SBC - VRProtect */ -case VERIFY_16 :/* SBC - VRProtect */ -case WRITE_VERIFY :/* SBC - VRProtect */ -case WRITE_VERIFY_12 :/* SBC - VRProtect */ -case MAINTENANCE_IN :/* SPC - Parameter Data Format for SA RTPG */ -break ; -default : - cdb[1 ] &=0x1f ;/* clear logical unit number */ -break ; - } -/* * For REPORT LUNS we always need to emulate the response, for everything * else, pass it up.
The pull request you sent on Fri, 25 Oct 2019 15:28:27 -0700:
The pull request you sent on Fri, 25 Oct 2019 15:28:27 -0700:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.gitscsi-fixes
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/1c4e395cf7ded47f33084865cbe2357cdbe4fd07
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.wiki.kernel.org/userdoc/prtracker