1. 27 Feb, 2019 13 commits
    • Benjamin Block's avatar
      scsi: core: replace GFP_ATOMIC with GFP_KERNEL in scsi_scan.c · 1749ef00
      Benjamin Block authored
      We had a test-report where, under memory pressure, adding LUNs to the
      systems would fail (the tests add LUNs strictly in sequence):
      
      [ 5525.853432] scsi 0:0:1:1088045124: Direct-Access     IBM      2107900          .148 PQ: 0 ANSI: 5
      [ 5525.853826] scsi 0:0:1:1088045124: alua: supports implicit TPGS
      [ 5525.853830] scsi 0:0:1:1088045124: alua: device naa.6005076303ffd32700000000000044da port group 0 rel port 43
      [ 5525.853931] sd 0:0:1:1088045124: Attached scsi generic sg10 type 0
      [ 5525.854075] sd 0:0:1:1088045124: [sdk] Disabling DIF Type 1 protection
      [ 5525.855495] sd 0:0:1:1088045124: [sdk] 2097152 512-byte logical blocks: (1.07 GB/1.00 GiB)
      [ 5525.855606] sd 0:0:1:1088045124: [sdk] Write Protect is off
      [ 5525.855609] sd 0:0:1:1088045124: [sdk] Mode Sense: ed 00 00 08
      [ 5525.855795] sd 0:0:1:1088045124: [sdk] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      [ 5525.857838]  sdk: sdk1
      [ 5525.859468] sd 0:0:1:1088045124: [sdk] Attached SCSI disk
      [ 5525.865073] sd 0:0:1:1088045124: alua: transition timeout set to 60 seconds
      [ 5525.865078] sd 0:0:1:1088045124: alua: port group 00 state A preferred supports tolusnA
      [ 5526.015070] sd 0:0:1:1088045124: alua: port group 00 state A preferred supports tolusnA
      [ 5526.015213] sd 0:0:1:1088045124: alua: port group 00 state A preferred supports tolusnA
      [ 5526.587439] scsi_alloc_sdev: Allocation failure during SCSI scanning, some SCSI devices might not be configured
      [ 5526.588562] scsi_alloc_sdev: Allocation failure during SCSI scanning, some SCSI devices might not be configured
      
      Looking at the code of scsi_alloc_sdev(), and all the calling contexts,
      there seems to be no reason to use GFP_ATMOIC here. All the different
      call-contexts use a mutex at some point, and nothing in between that
      requires no sleeping, as far as I could see. Additionally, the code that
      later allocates the block queue for the device (scsi_mq_alloc_queue())
      already uses GFP_KERNEL.
      
      There are similar allocations in two other functions:
      scsi_probe_and_add_lun(), and scsi_add_lun(),; that can also be done with
      GFP_KERNEL.
      
      Here is the contexts for the three functions so far:
      
          scsi_alloc_sdev()
              scsi_probe_and_add_lun()
                  scsi_sequential_lun_scan()
                      __scsi_scan_target()
                          scsi_scan_target()
                              mutex_lock()
                          scsi_scan_channel()
                              scsi_scan_host_selected()
                                  mutex_lock()
                  scsi_report_lun_scan()
                      __scsi_scan_target()
          	            ...
                  __scsi_add_device()
                      mutex_lock()
                  __scsi_scan_target()
                      ...
              scsi_report_lun_scan()
                  ...
              scsi_get_host_dev()
                  mutex_lock()
      
          scsi_probe_and_add_lun()
              ...
      
          scsi_add_lun()
              scsi_probe_and_add_lun()
                  ...
      
      So replace all these, and give them a bit of a better chance to succeed,
      with more chances of reclaim.
      Signed-off-by: default avatarBenjamin Block <bblock@linux.ibm.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      1749ef00
    • Gustavo A. R. Silva's avatar
      scsi: mpt3sas: Add missing breaks in switch statements · 7850b51b
      Gustavo A. R. Silva authored
      Fix the following warnings by adding the proper missing breaks:
      
      drivers/scsi/mpt3sas/mpt3sas_base.c: In function  _base_display_OEMs_branding :
      drivers/scsi/mpt3sas/mpt3sas_base.c:3548:4: warning: this statement may fall through [-Wimplicit-fallthrough=]
          switch (ioc->pdev->subsystem_device) {
          ^~~~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3566:3: note: here
         case MPI2_MFGPAGE_DEVID_SAS2308_2:
         ^~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3567:4: warning: this statement may fall through [-Wimplicit-fallthrough=]
          switch (ioc->pdev->subsystem_device) {
          ^~~~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3601:3: note: here
         case MPI25_MFGPAGE_DEVID_SAS3008:
         ^~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3735:4: warning: this statement may fall through [-Wimplicit-fallthrough=]
          switch (ioc->pdev->subsystem_device) {
          ^~~~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3745:3: note: here
         case MPI2_MFGPAGE_DEVID_SAS2308_2:
         ^~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3746:4: warning: this statement may fall through [-Wimplicit-fallthrough=]
          switch (ioc->pdev->subsystem_device) {
          ^~~~~~
      drivers/scsi/mpt3sas/mpt3sas_base.c:3768:3: note: here
         default:
         ^~~~~~~
      
      Warning level 3 was used: -Wimplicit-fallthrough=3
      
      This patch is part of the ongoing efforts to enable
      -Wimplicit-fallthrough.
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      7850b51b
    • Gustavo A. R. Silva's avatar
      scsi: aacraid: Fix missing break in switch statement · 5e420fe6
      Gustavo A. R. Silva authored
      Add missing break statement and fix identation issue.
      
      This bug was found thanks to the ongoing efforts to enable
      -Wimplicit-fallthrough.
      
      Fixes: 9cb62fa2 ("aacraid: Log firmware AIF messages")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      5e420fe6
    • Hannes Reinecke's avatar
      scsi: kill command serial number · b9cef509
      Hannes Reinecke authored
      No users left, kill it.
      Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      b9cef509
    • Hannes Reinecke's avatar
      scsi: csiostor: drop serial_number usage · f50e7605
      Hannes Reinecke authored
      Use request tag instead of the serial number when printing out logging
      messages.
      Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      f50e7605
    • Hannes Reinecke's avatar
      scsi: mvumi: use request tag instead of serial_number · 7df158ce
      Hannes Reinecke authored
      Use the request tag for logging instead of the scsi command serial number.
      Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      7df158ce
    • Hannes Reinecke's avatar
      scsi: dpt_i2o: remove serial number usage · 470d19e2
      Hannes Reinecke authored
      Drop references to scsi_cmnd->serial_number.
      Signed-off-by: default avatarHannes Reinecke <hare@suse.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      470d19e2
    • Iustin Pop's avatar
      scsi: st: osst: Remove negative constant left-shifts · 6f46f718
      Iustin Pop authored
      Negative constant left-shift is undefined behaviour in the C standard, and
      as such newer versions of clang (at least) warn against it. GCC supports it
      for a long time, but it would be better to remove it and rely on defined
      behaviour.
      
      My understanding is "~(-1 << N)" in 2's complement is intended to generate
      a bit pattern of zeroes ending with N '1' bits. The same can be achieved by
      "(1 << N) - 1" in a well-defined way, so switch to it to remove the
      warning.
      
      Tested: building a kernel with generic SCSI tape, and checking basic
      operations (mt status, mt eject) on a real LTO unit. Cannot test the osst
      driver.
      Signed-off-by: default avatarIustin Pop <iustin@k1024.org>
      Reviewed-by: default avatarLee Duncan <lduncan@suse.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      6f46f718
    • Avri Altman's avatar
      scsi: ufs-bsg: Allow reading descriptors · 5c17f87a
      Avri Altman authored
      Add this functionality, placing the descriptor being read in the actual
      data buffer in the bio.
      
      That is, for both read and write descriptors query upiu, we are using the
      job's request_payload.  This in turn, is mapped back in user land to the
      applicable sg_io_v4 xferp: dout_xferp for write descriptor, and din_xferp
      for read descriptor.
      Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
      Reviewed-by: default avatarEvan Green <evgreen@chromium.org>
      Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      5c17f87a
    • Avri Altman's avatar
      scsi: ufs: Allow reading descriptor via raw upiu · 4bbbe242
      Avri Altman authored
      Allow to read descriptors via raw upiu. This in fact was forbidden just as
      a precaution, as ufs-bsg actually enforces which functionality is
      supported.
      Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
      Reviewed-by: default avatarEvan Green <evgreen@chromium.org>
      Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      4bbbe242
    • Avri Altman's avatar
      scsi: ufs-bsg: Change the calling convention for write descriptor · 4eaa329e
      Avri Altman authored
      When we had a write descriptor query upiu, we appended the descriptor right
      after the bsg request.  This was fine as the bsg driver allows to allocate
      whatever buffer we needed in its job request.
      
      Still, the proper way to deliver payload, however small (we only write
      config descriptors of 144 bytes), is by using the job request payload data
      buffer.
      
      So change this ABI now, while ufs-bsg is still new, and nobody is actually
      using it.
      Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
      Reviewed-by: default avatarEvan Green <evgreen@chromium.org>
      Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      4eaa329e
    • Marc Gonzalez's avatar
      scsi: ufs: Remove unused device quirks · e9cb9655
      Marc Gonzalez authored
      The UFSHC driver defines a few quirks that are not used anywhere:
      
      UFS_DEVICE_QUIRK_BROKEN_LCC
      UFS_DEVICE_NO_VCCQ
      UFS_DEVICE_QUIRK_NO_LINK_OFF
      UFS_DEVICE_NO_FASTAUTO
      
      Let's remove them.
      Acked-by: default avatarAvri Altman <avri.altman@wdc.com>
      Acked-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
      Reviewed-by: default avatarEvan Green <evgreen@chromium.org>
      Signed-off-by: default avatarMarc Gonzalez <marc.w.gonzalez@free.fr>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      e9cb9655
    • Marc Gonzalez's avatar
      Revert "scsi: ufs: disable vccq if it's not needed by UFS device" · 73067981
      Marc Gonzalez authored
      This reverts commit 60f01870.
      
      There was one conflict in drivers/scsi/ufs/ufshcd.c
      
      <<<<<<< HEAD
      	/* Init check for device descriptor sizes */
      	ufshcd_init_desc_sizes(hba);
      
      	ret = ufs_get_device_desc(hba, &card);
      	if (ret) {
      		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
      			__func__, ret);
      		goto out;
      	}
      
      	ufs_fixup_device_setup(hba, &card);
      	ufshcd_tune_unipro_params(hba);
      
      	ret = ufshcd_set_vccq_rail_unused(hba,
      		(hba->dev_quirks & UFS_DEVICE_NO_VCCQ) ? true : false);
      	if (ret)
      		goto out;
      
      =======
      	ufs_advertise_fixup_device(hba);
      >>>>>>> parent of 60f01870... scsi: ufs: disable vccq if it's not needed by UFS device
      
      Resolution: keep HEAD, and delete the ufshcd_set_vccq_rail_unused() call
      and corresponding error-handling code.
      
      Clean up loose ends in a follow-up patch.
      
      60f01870 introduced a small power optimization: ignore the vccq load
      specified in the UFSHC DT node when said host controller is connected to
      specific Flash chips (currently, Samsung and Hynix).
      
      Unfortunately, this optimization breaks UFS on systems where vccq powers
      not only the Flash chip, but the host controller as well, such as APQ8098
      MEDIABOX or MTP8998:
      
      [    3.929877] ufshcd-qcom 1da4000.ufshc: ufshcd_query_attr: opcode 0x04 for idn 13 failed, index 0, err = -11
      [    5.433815] ufshcd-qcom 1da4000.ufshc: ufshcd_query_attr: opcode 0x04 for idn 13 failed, index 0, err = -11
      [    6.937771] ufshcd-qcom 1da4000.ufshc: ufshcd_query_attr: opcode 0x04 for idn 13 failed, index 0, err = -11
      [    6.937866] ufshcd-qcom 1da4000.ufshc: ufshcd_query_attr_retry: query attribute, idn 13, failed with error -11 after 3 retires
      [    6.946412] ufshcd-qcom 1da4000.ufshc: ufshcd_disable_auto_bkops: failed to enable exception event -11
      [    6.957972] ufshcd-qcom 1da4000.ufshc: dme-peer-get: attr-id 0x1587 failed 3 retries
      [    6.967181] ufshcd-qcom 1da4000.ufshc: dme-peer-get: attr-id 0x1586 failed 3 retries
      [    6.975025] ufshcd-qcom 1da4000.ufshc: ufshcd_get_max_pwr_mode: invalid max pwm tx gear read = 0
      [    6.982755] ufshcd-qcom 1da4000.ufshc: ufshcd_probe_hba: Failed getting max supported power mode
      [    8.505770] ufshcd-qcom 1da4000.ufshc: ufshcd_query_flag: Sending flag query for idn 3 failed, err = -11
      [   10.009807] ufshcd-qcom 1da4000.ufshc: ufshcd_query_flag: Sending flag query for idn 3 failed, err = -11
      [   11.513766] ufshcd-qcom 1da4000.ufshc: ufshcd_query_flag: Sending flag query for idn 3 failed, err = -11
      [   11.513861] ufshcd-qcom 1da4000.ufshc: ufshcd_query_flag_retry: query attribute, opcode 5, idn 3, failed with error -11 after 3 retires
      [   13.049807] ufshcd-qcom 1da4000.ufshc: __ufshcd_query_descriptor: opcode 0x01 for idn 8 failed, index 0, err = -11
      [   14.553768] ufshcd-qcom 1da4000.ufshc: __ufshcd_query_descriptor: opcode 0x01 for idn 8 failed, index 0, err = -11
      [   16.057767] ufshcd-qcom 1da4000.ufshc: __ufshcd_query_descriptor: opcode 0x01 for idn 8 failed, index 0, err = -11
      [   16.057872] ufshcd-qcom 1da4000.ufshc: ufshcd_read_desc_param: Failed reading descriptor. desc_id 8, desc_index 0, param_offset 0, ret -11
      [   16.067109] ufshcd-qcom 1da4000.ufshc: ufshcd_init_icc_levels: Failed reading power descriptor.len = 98 ret = -11
      [   37.073787] ufshcd-qcom 1da4000.ufshc: link startup failed 1
      
      In my opinion, the rationale for the original patch is questionable.  If
      neither the UFSHC, nor the Flash chip, require any load from vccq, then
      that power rail should simply not be specified at all in the DT.
      
      Working around that fact in the driver is detrimental, as evidenced by the
      failure to initialize the host controller on MSM8998.
      Acked-by: default avatarAvri Altman <avri.altman@wdc.com>
      Acked-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
      Signed-off-by: default avatarMarc Gonzalez <marc.w.gonzalez@free.fr>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      73067981
  2. 26 Feb, 2019 4 commits
    • YueHaibing's avatar
      scsi: megaraid_sas: Remove a bunch of set but not used variables · 379c003f
      YueHaibing authored
      Fixes gcc '-Wunused-but-set-variable' warning:
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'wait_and_poll':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:936:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_sync_map_info':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:1329:6: warning:
       variable 'size_sync_info' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_init_adapter_fusion':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:1639:39: warning:
       variable 'reg_set' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_is_prp_possible':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:1925:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_make_prp_nvme':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:2047:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_build_ldio_fusion':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:2620:42: warning:
       variable 'req_desc' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_build_and_issue_cmd_fusion':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3245:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_task_abort_fusion':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:4398:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function 'megasas_reset_target_fusion':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:4484:25: warning:
       variable 'fusion' set but not used [-Wunused-but-set-variable]
      
      They're not used anymore and can be removed.
      Signed-off-by: default avatarYueHaibing <yuehaibing@huawei.com>
      Acked-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      379c003f
    • Avri Altman's avatar
      scsi: clean obsolete return values of eh_timed_out · 82c10ac7
      Avri Altman authored
      Those are no longer in use since commit 242f9dcb
      ("block: unify request timeout handling").
      Signed-off-by: default avatarAvri Altman <avri.altman@wdc.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      82c10ac7
    • Martin K. Petersen's avatar
      scsi: sd: Optimal I/O size should be a multiple of physical block size · a83da8a4
      Martin K. Petersen authored
      It was reported that some devices report an OPTIMAL TRANSFER LENGTH of
      0xFFFF blocks. That looks bogus, especially for a device with a
      4096-byte physical block size.
      
      Ignore OPTIMAL TRANSFER LENGTH if it is not a multiple of the device's
      reported physical block size.
      
      To make the sanity checking conditionals more readable--and to
      facilitate printing warnings--relocate the checking to a helper
      function. No functional change aside from the printks.
      
      Cc: <stable@vger.kernel.org>
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=199759Reported-by: default avatarChristoph Anton Mitterer <calestyo@scientia.net>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      a83da8a4
    • Martin K. Petersen's avatar
      scsi: MAINTAINERS: SCSI initiator and target tweaks · d1420f2c
      Martin K. Petersen authored
      Nic has been absent for a while and target changes now go through the SCSI
      tree. To avoid confusion wrt. the NVMe target, clarify that this entry
      refers to the SCSI target subsystem.
      
      Also add patchwork links for both SCSI initiator and target.
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      d1420f2c
  3. 19 Feb, 2019 19 commits
  4. 14 Feb, 2019 2 commits
  5. 13 Feb, 2019 2 commits