SCSI fixes for 4.19-rc2
Subsystems (7)
James Bottomley
maintainerA set of very minor fixes and a couple of reverts to fix a major problem (the attempt to change the busy count causes a hang when attempting to change the drive cache type).
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Dan Carpenter (1):
scsi: aacraid: fix a signedness bug
Geert Uytterhoeven (2):
scsi: libata: Add missing newline at end of file
scsi: core: Update SCSI_MQ_DEFAULT help text to match default
James Smart (2):
scsi: lpfc: Correct MDS diag and nvmet configuration
scsi: lpfc: Default fdmi_on to on
John Pittman (1):
scsi: documentation: add scsi_mod.use_blk_mq to scsi-parameters
Martin Wilck (1):
scsi: hpsa: limit transfer length to 1MB, not 512kB
Ming Lei (2):
Revert "scsi: core: avoid host-wide host_busy counter for scsi_mq" Revert "scsi: core: fix scsi_host_queue_ready"
Varun Prakash (3):
scsi: target: iscsi: cxgbit: use pr_debug() instead of pr_info()
scsi: csiostor: fix incorrect port capabilities
scsi: csiostor: add a check for NULL pointer after kmalloc()
And the diffstat:
Documentation/scsi/scsi-parameters.txt | 5 +++ drivers/ata/libata-core.c | 2 +- drivers/scsi/Kconfig | 10 ++--- drivers/scsi/aacraid/aacraid.h | 2 +- drivers/scsi/csiostor/csio_hw.c | 71 ++++++++++++++++++++++++-------- drivers/scsi/csiostor/csio_hw.h | 1 + drivers/scsi/csiostor/csio_mb.c | 6 +-- drivers/scsi/hosts.c | 24 +---------- drivers/scsi/hpsa.c | 2 +- drivers/scsi/lpfc/lpfc.h | 2 +- drivers/scsi/lpfc/lpfc_attr.c | 8 ++-- drivers/scsi/scsi_lib.c | 21 +++------- drivers/target/iscsi/cxgbit/cxgbit_ddp.c | 8 ++-- 13 files changed, 85 insertions(+), 77 deletions(-)
With full diff below.
James
---
Documentation/scsi/scsi-parameters.txt +5 -0
@@ -97,6 +97,11 @@ parameters may be changed at runtime by the command allowing boot to proceed. none ignores them, expecting user space to do the scan. + scsi_mod.use_blk_mq= + [SCSI] use blk-mq I/O path by default + See SCSI_MQ_DEFAULT in drivers/scsi/Kconfig. + Format: <y/n> + sim710= [SCSI,HW] See header of drivers/scsi/sim710.c.
drivers/ata/libata-core.c +1 -1
@@ -7394,4 +7394,4 @@ EXPORT_SYMBOL_GPL(ata_cable_unknown);EXPORT_SYMBOL_GPL (ata_cable_ignore);EXPORT_SYMBOL_GPL (ata_cable_sata);EXPORT_SYMBOL_GPL (ata_host_get); -EXPORT_SYMBOL_GPL (ata_host_put); +EXPORT_SYMBOL_GPL (ata_host_put);
drivers/scsi/Kconfig +5 -5
@@ -52,12 +52,12 @@ config SCSI_MQ_DEFAULT default y depends on SCSI ---help--- - This option enables the new blk-mq based I/O path for SCSI - devices by default. With the option the scsi_mod.use_blk_mq - module/boot option defaults to Y, without it to N, but it can - still be overridden either way. + This option enables the blk-mq based I/O path for SCSI devices by + default. With this option the scsi_mod.use_blk_mq module/boot + option defaults to Y, without it to N, but it can still be + overridden either way. - If unsure say N. + If unsure say Y. config SCSI_PROC_FS bool "legacy /proc/scsi/ support"
drivers/scsi/aacraid/aacraid.h +1 -1
@@ -1346,7 +1346,7 @@ struct fib {struct aac_hba_map_info {__le32 rmw_nexus;/* nexus for native HBA devices */ u8 devtype;/* device type */ -u8 reset_state;/* 0 - no reset, 1..x - */ +s8 reset_state;/* 0 - no reset, 1..x - */ /* after xth TM LUN reset */ u16 qd_limit;u32 scan_counter;
drivers/scsi/csiostor/csio_hw.c +53 -18
107 lines not on this page · raw message
drivers/scsi/csiostor/csio_hw.h +1 -0
@@ -639,6 +639,7 @@ int csio_handle_intr_status(struct csio_hw *, unsigned int,fw_port_cap32_t fwcap_to_fwspeed (fw_port_cap32_t acaps);fw_port_cap32_t fwcaps16_to_caps32 (fw_port_cap16_t caps16); +fw_port_cap16_t fwcaps32_to_caps16 (fw_port_cap32_t caps32);fw_port_cap32_t lstatus_to_fwcap (u32 lstatus);int csio_hw_start (struct csio_hw *);
drivers/scsi/csiostor/csio_mb.c +3 -3
@@ -368,7 +368,7 @@ csio_mb_port(struct csio_hw *hw, struct csio_mb *mbp, uint32_t tmo, FW_CMD_LEN16_V(sizeof(*cmdp) / 16));if (fw_caps ==FW_CAPS16 ) - cmdp->u.l1cfg.rcap =cpu_to_be32 (fc); + cmdp->u.l1cfg.rcap =cpu_to_be32 (fwcaps32_to_caps16 (fc));else cmdp->u.l1cfg32.rcap32 =cpu_to_be32 (fc); }
@@ -395,8 +395,8 @@ csio_mb_process_read_port_rsp(struct csio_hw *hw, struct csio_mb *mbp, *pcaps =fwcaps16_to_caps32 (ntohs (rsp->u.info.pcap)); *acaps =fwcaps16_to_caps32 (ntohs (rsp->u.info.acap)); }else { - *pcaps =ntohs (rsp->u.info32.pcaps32); - *acaps =ntohs (rsp->u.info32.acaps32); + *pcaps =be32_to_cpu (rsp->u.info32.pcaps32); + *acaps =be32_to_cpu (rsp->u.info32.acaps32); } } }
drivers/scsi/hosts.c +1 -23
@@ -563,35 +563,13 @@ struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost) }EXPORT_SYMBOL (scsi_host_get); -struct scsi_host_mq_in_flight { -int cnt; -}; - -static void scsi_host_check_in_flight (struct request *rq,void *data, -bool reserved) -{ -struct scsi_host_mq_in_flight *in_flight = data; - -if (blk_mq_request_started (rq)) - in_flight->cnt++; -} -/** * scsi_host_busy - Return the host busy counter * @shost: Pointer to Scsi_Host to inc. **/ int scsi_host_busy (struct Scsi_Host *shost) { -struct scsi_host_mq_in_flight in_flight = { - .cnt =0 , - }; - -if (!shost->use_blk_mq) -return atomic_read (&shost->host_busy); - -blk_mq_tagset_busy_iter (&shost->tag_set, scsi_host_check_in_flight, - &in_flight); -return in_flight.cnt; +return atomic_read (&shost->host_busy); }EXPORT_SYMBOL (scsi_host_busy);
drivers/scsi/hpsa.c +1 -1
@@ -976,7 +976,7 @@ static struct scsi_host_template hpsa_driver_template = {#endif .sdev_attrs = hpsa_sdev_attrs, .shost_attrs = hpsa_shost_attrs, - .max_sectors = 1024, + .max_sectors = 2048, .no_write_same = 1, };
drivers/scsi/lpfc/lpfc.h +1 -1
@@ -672,7 +672,7 @@ struct lpfc_hba {#define LS_NPIV_FAB_SUPPORTED 0x2/* Fabric supports NPIV */ #define LS_IGNORE_ERATT 0x4/* intr handler should ignore ERATT */ #define LS_MDS_LINK_DOWN 0x8/* MDS Diagnostics Link Down */ -#define LS_MDS_LOOPBACK 0x16/* MDS Diagnostics Link Up (Loopback) */ +#define LS_MDS_LOOPBACK 0x10/* MDS Diagnostics Link Up (Loopback) */ uint32_t hba_flag;/* hba generic flags */ #define HBA_ERATT_HANDLED 0x1/* This flag is set when eratt handled */
drivers/scsi/lpfc/lpfc_attr.c +4 -4
@@ -5122,16 +5122,16 @@ LPFC_ATTR_R(enable_SmartSAN, 0, 0, 1, "Enable SmartSAN functionality");/* # lpfc_fdmi_on: Controls FDMI support. -# 0 No FDMI support (default) -# 1 Traditional FDMI support +# 0 No FDMI support +# 1 Traditional FDMI support (default) # Traditional FDMI support means the driver will assume FDMI-2 support; # however, if that fails, it will fallback to FDMI-1. # If lpfc_enable_SmartSAN is set to 1, the driver ignores lpfc_fdmi_on. # If lpfc_enable_SmartSAN is set 0, the driver uses the current value of # lpfc_fdmi_on. -# Value range [0,1]. Default value is 0. +# Value range [0,1]. Default value is 1. */ -LPFC_ATTR_R (fdmi_on,0 ,0 ,1 ,"Enable FDMI support" ); +LPFC_ATTR_R (fdmi_on,1 ,0 ,1 ,"Enable FDMI support" );/* # Specifies the maximum number of ELS cmds we can have outstanding (for
drivers/scsi/scsi_lib.c +5 -16
@@ -345,8 +345,7 @@ static void scsi_dec_host_busy(struct Scsi_Host *shost)unsigned long flags;rcu_read_lock (); -if (!shost->use_blk_mq) -atomic_dec (&shost->host_busy); +atomic_dec (&shost->host_busy);if (unlikely (scsi_host_in_recovery (shost))) {spin_lock_irqsave (shost->host_lock, flags);if (shost->host_failed || shost->host_eh_scheduled)
@@ -445,12 +444,7 @@ static inline bool scsi_target_is_busy(struct scsi_target *starget)static inline bool scsi_host_is_busy (struct Scsi_Host *shost) { -/* -* blk-mq can handle host queue busy efficiently via host-wide driver -* tag allocation -*/ - -if (!shost->use_blk_mq && shost->can_queue >0 && +if (shost->can_queue >0 &&atomic_read (&shost->host_busy) >= shost->can_queue)return true;if (atomic_read (&shost->host_blocked) >0 )
@@ -1606,10 +1600,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q,if (scsi_host_in_recovery (shost))return 0 ; -if (!shost->use_blk_mq) - busy =atomic_inc_return (&shost->host_busy) -1 ; -else - busy =0 ; + busy =atomic_inc_return (&shost->host_busy) -1 ;if (atomic_read (&shost->host_blocked) >0 ) {if (busy) goto starved;
@@ -1625,7 +1616,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q, "unblocking host at zero depth\n")); } -if (!shost->use_blk_mq && shost->can_queue >0 && busy >= shost->can_queue) +if (shost->can_queue >0 && busy >= shost->can_queue) goto starved;if (shost->host_self_blocked) goto starved;
@@ -1711,9 +1702,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)* with the locks as normal issue path does. */ atomic_inc (&sdev->device_busy); - -if (!shost->use_blk_mq) -atomic_inc (&shost->host_busy); +atomic_inc (&shost->host_busy);if (starget->can_queue >0 )atomic_inc (&starget->target_busy);
drivers/target/iscsi/cxgbit/cxgbit_ddp.c +4 -4
@@ -207,8 +207,8 @@ cxgbit_ddp_reserve(struct cxgbit_sock *csk, struct cxgbi_task_tag_info *ttinfo, ret =dma_map_sg (&ppm->pdev->dev, sgl, sgcnt,DMA_FROM_DEVICE ); sgl->offset = sg_offset;if (!ret) { -pr_info ("%s: 0x%x, xfer %u, sgl %u dma mapping err.\n" , - __func__,0 , xferlen, sgcnt); +pr_debug ("%s: 0x%x, xfer %u, sgl %u dma mapping err.\n" , + __func__,0 , xferlen, sgcnt); goto rel_ppods; }
@@ -250,8 +250,8 @@ cxgbit_get_r2t_ttt(struct iscsi_conn *conn, struct iscsi_cmd *cmd, ret =cxgbit_ddp_reserve (csk, ttinfo, cmd->se_cmd.data_length);if (ret <0 ) { -pr_info ("csk 0x%p, cmd 0x%p, xfer len %u, sgcnt %u no ddp.\n" , - csk, cmd, cmd->se_cmd.data_length, ttinfo->nents); +pr_debug ("csk 0x%p, cmd 0x%p, xfer len %u, sgcnt %u no ddp.\n" , + csk, cmd, cmd->se_cmd.data_length, ttinfo->nents); ttinfo->sgl =NULL ; ttinfo->nents =0 ;