SCSI fixes for 5.2-rc1
Subsystems (7)
James Bottomley
maintainerThis is the same set of patches sent in the merge window as the final pull except that Martin's read only rework is replaced with a simple revert of the original change that caused the regression. Everything else is an obvious fix or small cleanup.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Colin Ian King (1):
scsi: bnx2fc: fix incorrect cast to u64 on shift operation
Erwan Velu (1):
scsi: smartpqi: Reporting unhandled SCSI errors
James Smart (4):
scsi: lpfc: Update lpfc version to 12.2.0.2
scsi: lpfc: add check for loss of ndlp when sending RRQ
scsi: lpfc: correct rcu unlock issue in lpfc_nvme_info_show
scsi: lpfc: resolve lockdep warnings
Martin K. Petersen (1):
Revert "scsi: sd: Keep disk read-only when re-reading partition"
Quinn Tran (1):
scsi: qla2xxx: Add cleanup for PCI EEH recovery
YueHaibing (3):
scsi: myrs: Fix uninitialized variable
scsi: qedi: remove set but not used variables 'cdev' and 'udev'
scsi: qedi: remove memset/memcpy to nfunc and use func instead
And the diffstat:
drivers/scsi/bnx2fc/bnx2fc_hwi.c | 2 +- drivers/scsi/lpfc/lpfc_attr.c | 37 +++--- drivers/scsi/lpfc/lpfc_els.c | 5 +- drivers/scsi/lpfc/lpfc_sli.c | 84 ++++++++----- drivers/scsi/lpfc/lpfc_version.h | 2 +- drivers/scsi/myrs.c | 2 +- drivers/scsi/qedi/qedi_dbg.c | 32 ++--- drivers/scsi/qedi/qedi_iscsi.c | 4 - drivers/scsi/qla2xxx/qla_os.c | 221 +++++++++++++--------------------- drivers/scsi/sd.c | 3 +- drivers/scsi/smartpqi/smartpqi_init.c | 23 ++-- 11 files changed, 189 insertions(+), 226 deletions(-)
With full diff below.
James
---
drivers/scsi/bnx2fc/bnx2fc_hwi.c +1 -1
@@ -830,7 +830,7 @@ static void bnx2fc_process_unsol_compl(struct bnx2fc_rport *tgt, u16 wqe) ((u64 )err_entry->data.err_warn_bitmap_hi <<32 ) | (u64 )err_entry->data.err_warn_bitmap_lo;for (i =0 ; i <BNX2FC_NUM_ERR_BITS ; i++) { -if (err_warn_bit_map & (u64) (1 << i)) { +if (err_warn_bit_map & ((u64 )1 << i)) { err_warn = i;break ; }
drivers/scsi/lpfc/lpfc_attr.c +22 -15
@@ -176,6 +176,7 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,int i;int len =0 ;char tmp[LPFC_MAX_NVME_INFO_TMP_LEN ] = {0 }; +unsigned long iflags =0 ;if (!(vport->cfg_enable_fc4_type &LPFC_ENABLE_NVME )) { len =scnprintf (buf,PAGE_SIZE ,"NVME Disabled\n" );
@@ -354,7 +355,7 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr, phba->sli4_hba.io_xri_max, lpfc_sli4_get_els_iocb_cnt(phba));if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;/* Port state is only one of two values for now. */ if (localport->port_id)
@@ -370,15 +371,15 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,wwn_to_u64 (vport->fc_nodename.u.wwn), localport->port_id, statep);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;list_for_each_entry (ndlp, &vport->fc_nodes, nlp_listp) { nrport =NULL ; -spin_lock (&vport->phba->hbalock); +spin_lock_irqsave (&vport->phba->hbalock, iflags); rport =lpfc_ndlp_get_nrport (ndlp);if (rport) nrport = rport->remoteport; -spin_unlock (&vport->phba->hbalock); +spin_unlock_irqrestore (&vport->phba->hbalock, iflags);if (!nrport)continue ;
@@ -397,39 +398,39 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,/* Tab in to show lport ownership. */ if (strlcat (buf,"NVME RPORT " ,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;if (phba->brd_no >=10 ) {if (strlcat (buf," " ,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; }scnprintf (tmp,sizeof (tmp),"WWPN x%llx " , nrport->port_name);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;scnprintf (tmp,sizeof (tmp),"WWNN x%llx " , nrport->node_name);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;scnprintf (tmp,sizeof (tmp),"DID x%06x " , nrport->port_id);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done;/* An NVME rport can have multiple roles. */ if (nrport->port_role &FC_PORT_ROLE_NVME_INITIATOR ) {if (strlcat (buf,"INITIATOR " ,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; }if (nrport->port_role &FC_PORT_ROLE_NVME_TARGET ) {if (strlcat (buf,"TARGET " ,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; }if (nrport->port_role &FC_PORT_ROLE_NVME_DISCOVERY ) {if (strlcat (buf,"DISCSRVC " ,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; } if (nrport->port_role & ~(FC_PORT_ROLE_NVME_INITIATOR | FC_PORT_ROLE_NVME_TARGET |
@@ -437,12 +438,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,scnprintf (tmp,sizeof (tmp),"UNKNOWN ROLE x%x" , nrport->port_role);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; }scnprintf (tmp,sizeof (tmp),"%s\n" , statep);if (strlcat (buf, tmp,PAGE_SIZE ) >=PAGE_SIZE ) - goto buffer_done; + goto rcu_unlock_buf_done; }rcu_read_unlock ();
@@ -504,7 +505,13 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr, atomic_read(&lport->cmpl_fcp_err));strlcat (buf, tmp,PAGE_SIZE ); -buffer_done: +/* RCU is already unlocked. */ + goto buffer_done; + + rcu_unlock_buf_done: +rcu_read_unlock (); + + buffer_done: len =strnlen (buf,PAGE_SIZE );if (unlikely (len >= (PAGE_SIZE -1 ))) {
drivers/scsi/lpfc/lpfc_els.c +4 -1
@@ -7334,7 +7334,10 @@ int lpfc_send_rrq(struct lpfc_hba *phba, struct lpfc_node_rrq *rrq) { struct lpfc_nodelist *ndlp = lpfc_findnode_did(rrq->vport, - rrq->nlp_DID); + rrq->nlp_DID); +if (!ndlp) +return 1 ; +if (lpfc_test_rrq_active (phba, ndlp, rrq->xritag))return lpfc_issue_els_rrq (rrq->vport, ndlp, rrq->nlp_DID, rrq);
drivers/scsi/lpfc/lpfc_sli.c +53 -31
215 lines not on this page · raw message
drivers/scsi/lpfc/lpfc_version.h +1 -1
@@ -20,7 +20,7 @@* included with this package. * *******************************************************************/ -#define LPFC_DRIVER_VERSION "12.2.0.1" +#define LPFC_DRIVER_VERSION "12.2.0.2"#define LPFC_DRIVER_NAME "lpfc"/* Used for SLI 2/3 */
drivers/scsi/myrs.c +1 -1
@@ -818,7 +818,7 @@ static void myrs_log_event(struct myrs_hba *cs, struct myrs_event *ev)unsigned char ev_type, *ev_msg;struct Scsi_Host *shost = cs->host;struct scsi_device *sdev; -struct scsi_sense_hdr sshdr; +struct scsi_sense_hdr sshdr = {0 };unsigned char sense_info[4 ];unsigned char cmd_specific[4 ];
drivers/scsi/qedi/qedi_dbg.c +8 -24
@@ -16,10 +16,6 @@ qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line, {va_list va;struct va_format vaf; -char nfunc[32 ]; - -memset (nfunc,0 ,sizeof (nfunc)); -memcpy (nfunc, func,sizeof (nfunc) -1 );va_start (va, fmt);
@@ -28,9 +24,9 @@ qedi_dbg_err(struct qedi_dbg_ctx *qedi, const char *func, u32 line,if (likely (qedi) &&likely (qedi->pdev))pr_err ("[%s]:[%s:%d]:%d: %pV" ,dev_name (&qedi->pdev->dev), - nfunc, line, qedi->host_no, &vaf); + func, line, qedi->host_no, &vaf);else -pr_err ("[0000:00:00.0]:[%s:%d]: %pV" , nfunc, line, &vaf); +pr_err ("[0000:00:00.0]:[%s:%d]: %pV" , func, line, &vaf);va_end (va); }
@@ -41,10 +37,6 @@ qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line, {va_list va;struct va_format vaf; -char nfunc[32 ]; - -memset (nfunc,0 ,sizeof (nfunc)); -memcpy (nfunc, func,sizeof (nfunc) -1 );va_start (va, fmt);
@@ -56,9 +48,9 @@ qedi_dbg_warn(struct qedi_dbg_ctx *qedi, const char *func, u32 line,if (likely (qedi) &&likely (qedi->pdev))pr_warn ("[%s]:[%s:%d]:%d: %pV" ,dev_name (&qedi->pdev->dev), - nfunc, line, qedi->host_no, &vaf); + func, line, qedi->host_no, &vaf);else -pr_warn ("[0000:00:00.0]:[%s:%d]: %pV" , nfunc, line, &vaf); +pr_warn ("[0000:00:00.0]:[%s:%d]: %pV" , func, line, &vaf); ret:va_end (va);
@@ -70,10 +62,6 @@ qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line, {va_list va;struct va_format vaf; -char nfunc[32 ]; - -memset (nfunc,0 ,sizeof (nfunc)); -memcpy (nfunc, func,sizeof (nfunc) -1 );va_start (va, fmt);
@@ -85,10 +73,10 @@ qedi_dbg_notice(struct qedi_dbg_ctx *qedi, const char *func, u32 line,if (likely (qedi) &&likely (qedi->pdev))pr_notice ("[%s]:[%s:%d]:%d: %pV" , -dev_name (&qedi->pdev->dev), nfunc, line, +dev_name (&qedi->pdev->dev), func, line, qedi->host_no, &vaf);else -pr_notice ("[0000:00:00.0]:[%s:%d]: %pV" , nfunc, line, &vaf); +pr_notice ("[0000:00:00.0]:[%s:%d]: %pV" , func, line, &vaf); ret:va_end (va);
@@ -100,10 +88,6 @@ qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line, {va_list va;struct va_format vaf; -char nfunc[32 ]; - -memset (nfunc,0 ,sizeof (nfunc)); -memcpy (nfunc, func,sizeof (nfunc) -1 );va_start (va, fmt);
@@ -115,9 +99,9 @@ qedi_dbg_info(struct qedi_dbg_ctx *qedi, const char *func, u32 line,if (likely (qedi) &&likely (qedi->pdev))pr_info ("[%s]:[%s:%d]:%d: %pV" ,dev_name (&qedi->pdev->dev), - nfunc, line, qedi->host_no, &vaf); + func, line, qedi->host_no, &vaf);else -pr_info ("[0000:00:00.0]:[%s:%d]: %pV" , nfunc, line, &vaf); +pr_info ("[0000:00:00.0]:[%s:%d]: %pV" , func, line, &vaf); ret:va_end (va);
drivers/scsi/qedi/qedi_iscsi.c +0 -4
@@ -809,8 +809,6 @@ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,struct qedi_endpoint *qedi_ep;struct sockaddr_in *addr;struct sockaddr_in6 *addr6; -struct qed_dev *cdev =NULL ; -struct qedi_uio_dev *udev =NULL ;struct iscsi_path path_req;u32 msg_type =ISCSI_KEVENT_IF_DOWN ;u32 iscsi_cid =QEDI_CID_RESERVED ;
@@ -830,8 +828,6 @@ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr, } qedi =iscsi_host_priv (shost); - cdev = qedi->cdev; - udev = qedi->udev;if (test_bit (QEDI_IN_OFFLINE , &qedi->flags) ||test_bit (QEDI_IN_RECOVERY , &qedi->flags)) {
drivers/scsi/qla2xxx/qla_os.c +82 -139
267 lines not on this page · raw message
drivers/scsi/sd.c +1 -2
@@ -2603,7 +2603,6 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)int res;struct scsi_device *sdp = sdkp->device;struct scsi_mode_data data; -int disk_ro =get_disk_ro (sdkp->disk);int old_wp = sdkp->write_prot;set_disk_ro (sdkp->disk,0 );
@@ -2644,7 +2643,7 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer) "Test WP failed, assume Write Enabled\n"); }else { sdkp->write_prot = ((data.device_specific &0x80 ) !=0 ); -set_disk_ro (sdkp->disk, sdkp->write_prot || disk_ro); +set_disk_ro (sdkp->disk, sdkp->write_prot);if (sdkp->first_scan || old_wp != sdkp->write_prot) {sd_printk (KERN_NOTICE , sdkp,"Write Protect is %s\n" , sdkp->write_prot ?"on" :"off" );
drivers/scsi/smartpqi/smartpqi_init.c +16 -7
@@ -2755,16 +2755,25 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request) scsi_normalize_sense(error_info->data, sense_data_length, &sshdr) && sshdr.sense_key == HARDWARE_ERROR && - sshdr.asc ==0x3e && - sshdr.ascq == 0x1) { + sshdr.asc == 0x3e) {struct pqi_ctrl_info *ctrl_info =shost_to_hba (scmd->device->host);struct pqi_scsi_dev *device = scmd->device->hostdata; -if (printk_ratelimit ()) -scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , - ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); -pqi_take_device_offline (scmd->device,"RAID" ); - host_byte =DID_NO_CONNECT ; +switch (sshdr.ascq) { +case 0x1 :/* LOGICAL UNIT FAILURE */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , + ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +pqi_take_device_offline (scmd->device,"RAID" ); + host_byte =DID_NO_CONNECT ; +break ; + +default :/* See http://www.t10.org/lists/asc-num.htm#ASC_3E */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received unhandled error %d from controller for scsi %d:%d:%d:%d\n" , + sshdr.ascq, ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +break ; + } }if (sense_data_length >SCSI_SENSE_BUFFERSIZE )
The pull request you sent on Fri, 24 May 2019 16:11:43 -0700:
The pull request you sent on Fri, 24 May 2019 16:11:43 -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/2409207a73cc8e4aff75ceccf6fe5c3ce4d391bc
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.wiki.kernel.org/userdoc/prtracker