1. 08 Aug, 2019 12 commits
    • Li Zhong's avatar
      scsi: target: tcmu: clean the nl_cmd of the udev when nl send fails · 7d894862
      Li Zhong authored
      If the userspace process crashes while we send the nl msg, it is possible
      that the cmd in curr_nl_cmd of tcmu_dev never gets reset to 0, and and
      returns busy for other commands after the userspace process is restartd.
      
      More details below:
      
      /backstores/user:file/file> set attribute dev_size=2048
      Cannot set attribute dev_size: [Errno 3] No such process
      /backstores/user:file/file> set attribute dev_size=2048
      Cannot set attribute dev_size: [Errno 16] Device or resource busy
      
      with following kernel messages:
      [173605.747169] Unable to reconfigure device
      [173616.686674] tcmu daemon: command reply support 1.
      [173623.866978] netlink cmd 3 already executing on file
      [173623.866984] Unable to reconfigure device
      
      Also, it is not safe to leave the nl_cmd in the list, and not get deleted.
      
      This patch removes the nl_cmd from the list, and clear its data if it is
      not sent successfully.
      Signed-off-by: default avatarLi Zhong <lizhongfs@gmail.com>
      Acked-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      7d894862
    • Anil Varughese's avatar
      scsi: ufs: Configure clock in .hce_enable_notify() in Cadence UFS · cb8b3359
      Anil Varughese authored
      Configure CDNS_UFS_REG_HCLKDIV in .hce_enable_notify() instead of
      .setup_clock() because if UFSHCD resets the controller ip because of phy or
      device related errors then CDNS_UFS_REG_HCLKDIV is reset to default value
      and .setup_clock() is not called later in the sequence whereas
      .hce_enable_notify will be called everytime controller is reenabled.
      Signed-off-by: default avatarAnil Varughese <aniljoy@cadence.com>
      Reviewed-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      cb8b3359
    • Bart Van Assche's avatar
      scsi: core: Reduce memory required for SCSI logging · dccc96ab
      Bart Van Assche authored
      The data structure used for log messages is so large that it can cause a
      boot failure. Since allocations from that data structure can fail anyway,
      use kmalloc() / kfree() instead of that data structure.
      
      See also https://bugzilla.kernel.org/show_bug.cgi?id=204119.
      See also commit ded85c19 ("scsi: Implement per-cpu logging buffer") # v4.0.
      Reported-by: default avatarJan Palus <jpalus@fastmail.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.com>
      Cc: Johannes Thumshirn <jthumshirn@suse.de>
      Cc: Ming Lei <ming.lei@redhat.com>
      Cc: Jan Palus <jpalus@fastmail.com>
      Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      dccc96ab
    • Bart Van Assche's avatar
      scsi: core: Complain if scsi_target_block() fails · 94ef80a5
      Bart Van Assche authored
      If scsi_target_block() fails that can break the code that calls this
      function. Hence complain loudly if scsi_target_block() fails.
      
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.com>
      Cc: Johannes Thumshirn <jthumshirn@suse.de>
      Cc: Ming Lei <ming.lei@redhat.com>
      Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      94ef80a5
    • Bart Van Assche's avatar
      scsi: core: Make scsi_internal_device_unblock_nowait() reject invalid new_state · 09addb1d
      Bart Van Assche authored
      The only 'new_state' values passed by upstream kernel code to
      scsi_internal_device_unblock_nowait() are SDEV_RUNNING and
      SDEV_TRANSPORT_OFFLINE. These are the only values that should be passed to
      this function. Hence check the value of the 'new_state' argument to avoid
      that scsi_internal_device_unblock_nowait() would be used to trigger an
      illegal SCSI device state transition. In this context 'illegal' means not
      allowed by scsi_device_set_state().
      
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.com>
      Cc: Johannes Thumshirn <jthumshirn@suse.de>
      Cc: Ming Lei <ming.lei@redhat.com>
      Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      09addb1d
    • Tomas Winkler's avatar
      scsi: ufs: revamp string descriptor reading · 4b828fe1
      Tomas Winkler authored
      Define new a type: uc_string_id for easier string handling and less
      casting. Reduce number or string copies in price of a dynamic allocation.
      Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
      Tested-by: default avatarAvri Altman <avri.altman@wdc.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      4b828fe1
    • Gustavo A. R. Silva's avatar
      scsi: wd33c93: Mark expected switch fall-through · c72a9692
      Gustavo A. R. Silva authored
      Mark switch cases where we are expecting to fall through.
      
      This patch fixes the following warning (Building: m68k):
      
      drivers/scsi/wd33c93.c: In function  round_4 :
      drivers/scsi/wd33c93.c:1856:11: warning: this statement may fall through [-Wimplicit-fallthrough=]
         case 2: ++x;
                 ^~~
      drivers/scsi/wd33c93.c:1857:3: note: here
         case 3: ++x;
         ^~~~
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      c72a9692
    • Gustavo A. R. Silva's avatar
      scsi: sun3_scsi: Mark expected switch fall-throughs · c78a6658
      Gustavo A. R. Silva authored
      Mark switch cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      drivers/scsi/sun3_scsi.c: warning: this statement may fall through
      [-Wimplicit-fallthrough=]:  => 399:9, 403:9
      Reported-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Tested-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      c78a6658
    • Gustavo A. R. Silva's avatar
      scsi: qlogicpti: Mark expected switch fall-throughs · 6d44c692
      Gustavo A. R. Silva authored
      Mark switch cases where we are expecting to fall through.
      
      This patch fixes the following warnings (Building: sparc defconfig):
      
      drivers/scsi/qlogicpti.c: In function 'qlogicpti_mbox_command':
      drivers/scsi/qlogicpti.c:202:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 6: sbus_writew(param[5], qpti->qregs + MBOX5);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:203:2: note: here
        case 5: sbus_writew(param[4], qpti->qregs + MBOX4);
        ^~~~
      drivers/scsi/qlogicpti.c:203:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 5: sbus_writew(param[4], qpti->qregs + MBOX4);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:204:2: note: here
        case 4: sbus_writew(param[3], qpti->qregs + MBOX3);
        ^~~~
      drivers/scsi/qlogicpti.c:204:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 4: sbus_writew(param[3], qpti->qregs + MBOX3);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:205:2: note: here
        case 3: sbus_writew(param[2], qpti->qregs + MBOX2);
        ^~~~
      drivers/scsi/qlogicpti.c:205:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 3: sbus_writew(param[2], qpti->qregs + MBOX2);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:206:2: note: here
        case 2: sbus_writew(param[1], qpti->qregs + MBOX1);
        ^~~~
      drivers/scsi/qlogicpti.c:206:10: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 2: sbus_writew(param[1], qpti->qregs + MBOX1);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:207:2: note: here
        case 1: sbus_writew(param[0], qpti->qregs + MBOX0);
        ^~~~
      drivers/scsi/qlogicpti.c:256:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 6: param[5] = sbus_readw(qpti->qregs + MBOX5);
                ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:257:2: note: here
        case 5: param[4] = sbus_readw(qpti->qregs + MBOX4);
        ^~~~
      drivers/scsi/qlogicpti.c:257:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 5: param[4] = sbus_readw(qpti->qregs + MBOX4);
                ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:258:2: note: here
        case 4: param[3] = sbus_readw(qpti->qregs + MBOX3);
        ^~~~
      drivers/scsi/qlogicpti.c:258:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 4: param[3] = sbus_readw(qpti->qregs + MBOX3);
                ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:259:2: note: here
        case 3: param[2] = sbus_readw(qpti->qregs + MBOX2);
        ^~~~
      drivers/scsi/qlogicpti.c:259:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 3: param[2] = sbus_readw(qpti->qregs + MBOX2);
                ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:260:2: note: here
        case 2: param[1] = sbus_readw(qpti->qregs + MBOX1);
        ^~~~
      drivers/scsi/qlogicpti.c:260:19: warning: this statement may fall through [-Wimplicit-fallthrough=]
        case 2: param[1] = sbus_readw(qpti->qregs + MBOX1);
                ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/qlogicpti.c:261:2: note: here
        case 1: param[0] = sbus_readw(qpti->qregs + MBOX0);
        ^~~~
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      6d44c692
    • Gustavo A. R. Silva's avatar
      scsi: ibmvfc: Mark expected switch fall-throughs · 4c735987
      Gustavo A. R. Silva authored
      Mark switch cases where we are expecting to fall through.
      
      This patch fixes the following warnings:
      
      drivers/scsi/ibmvscsi/ibmvfc.c: In function 'ibmvfc_npiv_login_done':
      drivers/scsi/ibmvscsi/ibmvfc.c:4022:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
         ibmvfc_retry_host_init(vhost);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/ibmvscsi/ibmvfc.c:4023:2: note: here
        case IBMVFC_MAD_DRIVER_FAILED:
        ^~~~
      drivers/scsi/ibmvscsi/ibmvfc.c: In function 'ibmvfc_bsg_request':
      drivers/scsi/ibmvscsi/ibmvfc.c:1830:11: warning: this statement may fall through [-Wimplicit-fallthrough=]
         port_id = (bsg_request->rqst_data.h_els.port_id[0] << 16) |
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          (bsg_request->rqst_data.h_els.port_id[1] << 8) |
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          bsg_request->rqst_data.h_els.port_id[2];
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/ibmvscsi/ibmvfc.c:1833:2: note: here
        case FC_BSG_RPT_ELS:
        ^~~~
      drivers/scsi/ibmvscsi/ibmvfc.c:1838:11: warning: this statement may fall through [-Wimplicit-fallthrough=]
         port_id = (bsg_request->rqst_data.h_ct.port_id[0] << 16) |
         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          (bsg_request->rqst_data.h_ct.port_id[1] << 8) |
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          bsg_request->rqst_data.h_ct.port_id[2];
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/scsi/ibmvscsi/ibmvfc.c:1841:2: note: here
        case FC_BSG_RPT_CT:
        ^~~~
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Acked-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      4c735987
    • Qian Cai's avatar
      scsi: megaraid_sas: Fix a compilation warning · e5460f08
      Qian Cai authored
      The commit de516379 ("scsi: megaraid_sas: changes to function
      prototypes") introduced a comilation warning due to it changed the function
      prototype of read_fw_status_reg() to take an instance pointer instead, but
      forgot to remove an unused variable.
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c: In function
      'megasas_fusion_update_can_queue':
      drivers/scsi/megaraid/megaraid_sas_fusion.c:326:39: warning: variable
      'reg_set' set but not used [-Wunused-but-set-variable]
        struct megasas_register_set __iomem *reg_set;
                                             ^~~~~~~
      Fixes: de516379 ("scsi: megaraid_sas: changes to function prototypes")
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Acked-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      e5460f08
    • YueHaibing's avatar
      scsi: megaraid_sas: Make a bunch of functions static · 88d5c343
      YueHaibing authored
      Fix sparse warnings:
      
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3369:1: warning: symbol 'complete_cmd_fusion' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3535:6: warning: symbol 'megasas_sync_irqs' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3554:1: warning: symbol 'megasas_complete_cmd_dpc_fusion' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3573:13: warning: symbol 'megasas_isr_fusion' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3604:1: warning: symbol 'build_mpt_mfi_pass_thru' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3661:40: warning: symbol 'build_mpt_cmd' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3688:1: warning: symbol 'megasas_issue_dcmd_fusion' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:3881:5: warning: symbol 'megasas_wait_for_outstanding_fusion' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:4005:6: warning: symbol 'megasas_refire_mgmt_cmd' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:4525:25: warning: symbol 'megasas_get_peer_instance' was not declared. Should it be static?
      drivers/scsi/megaraid/megaraid_sas_fusion.c:4825:7: warning: symbol 'megasas_fusion_crash_dump' was not declared. Should it be static?
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      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>
      88d5c343
  2. 07 Aug, 2019 9 commits
    • Himanshu Madhani's avatar
    • Quinn Tran's avatar
      scsi: qla2xxx: Allow NVMe IO to resume with short cable pull · 03cc44bf
      Quinn Tran authored
      Current driver report dev_loss_tmo to 0 for NVMe devices with short cable
      pull.  This causes NVMe controller to be freed along with NVMe namespace.
      The side affect is IO would stop.  By not setting dev_loss_tmo to 0, NVMe
      namespace would stay until cable is plugged back in.  This allows IO to
      resume afterward.
      
      [mkp: commit desc]
      Signed-off-by: default avatarArun Easi <aeasi@marvell.com>
      Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      03cc44bf
    • Quinn Tran's avatar
      scsi: qla2xxx: Fix hang in fcport delete path · f00b3428
      Quinn Tran authored
      A hang was observed in the fcport delete path when the device was
      responding slow and an issue-lip path (results in session termination) was
      taken.
      
      Fix this by issuing logo requests unconditionally.
      
      PID: 19491  TASK: ffff8e23e67bb150  CPU: 0   COMMAND: "kworker/0:0"
       #0 [ffff8e2370297bf8] __schedule at ffffffffb4f7dbb0
       #1 [ffff8e2370297c88] schedule at ffffffffb4f7e199
       #2 [ffff8e2370297c98] schedule_timeout at ffffffffb4f7ba68
       #3 [ffff8e2370297d40] msleep at ffffffffb48ad9ff
       #4 [ffff8e2370297d58] qlt_free_session_done at ffffffffc0c32052 [qla2xxx]
       #5 [ffff8e2370297e20] process_one_work at ffffffffb48bcfdf
       #6 [ffff8e2370297e68] worker_thread at ffffffffb48bdca6
       #7 [ffff8e2370297ec8] kthread at ffffffffb48c4f81
      Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      f00b3428
    • Andrew Vasquez's avatar
      scsi: qla2xxx: Use common update-firmware-options routine for ISP27xx+ · a36f1443
      Andrew Vasquez authored
      Leverage the generic routine, qla24xx_update_fw_options(), for the
      configuration of firmware options for ISP27xx/ISP28xx.
      Signed-off-by: default avatarAndrew Vasquez <andrewv@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      a36f1443
    • Arun Easi's avatar
      scsi: qla2xxx: Fix NVMe port discovery after a short device port loss · 9e744591
      Arun Easi authored
      The following sequence of event leads to NVME port disappearing:
      
          - device port shut
          - nvme_fc_unregister_remoteport
          - device port online
          - remote port delete completes
          - relogin is scheduled
          - "post gidpn" message appears due to rscn generation # mismatch
      
      In short, if a device comes back online sooner than an unregister
      completion, a mismatch in rscn generation number occurs, which is not
      handled correctly during device relogin. Fix this by starting with a redo
      of GNL.
      
      When ql2xextended_error_logging is enabled, the re-plugged device's
      discovery stops with the following messages printed:
      
      --8<--
      qla2xxx [0000:41:00.0]-480d:3: Relogin scheduled.
      qla2xxx [0000:41:00.0]-4800:3: DPC handler sleeping.
      qla2xxx [0000:41:00.0]-2902:3: qla24xx_handle_relogin_event 21:00:00:24:ff:17:9e:91 DS 0 LS 7 P 0 del 2 cnfl
         (null) rscn 1|2 login 1|2 fl 1
      qla2xxx [0000:41:00.0]-28e9:3: qla24xx_handle_relogin_event 1666 21:00:00:24:ff:17:9e:91 post gidpn
      qla2xxx [0000:41:00.0]-480e:3: Relogin end.
      --8<--
      Signed-off-by: default avatarArun Easi <aeasi@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      9e744591
    • Andrew Vasquez's avatar
      scsi: qla2xxx: Correct error handling during initialization failures · 26a77799
      Andrew Vasquez authored
      Current code misses or fails to account for proper recovery during early
      initialization failures:
      
       - Properly unwind allocations during probe() failures.
      
       - Protect against non-initialization memory allocations during
         unwinding.
      
       - Propagate error status during HW initialization.
      
       - Release SCSI host reference when memory allocations fail.
      Signed-off-by: default avatarAndrew Vasquez <andrewv@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      26a77799
    • Quinn Tran's avatar
      scsi: qla2xxx: Retry fabric Scan on IOCB queue full · f0cecc1e
      Quinn Tran authored
      when fabric scan thread encounters IOCB Q Full, schedule a delayed work to
      retry fabric scan.
      Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      f0cecc1e
    • Quinn Tran's avatar
      scsi: qla2xxx: Fix premature timer expiration · 3a4b6cc7
      Quinn Tran authored
      For any qla2xxx async command, the SRB buffer is used to send it. In
      setting up the SRB buffer, the timer for this command is started before all
      memory allocation has finished.  Under low memory pressure, memory alloc
      can go to sleep and not wake up before the timer expires. Once timer has
      expired, the timer thread will access uninitialize fields resulting into
      NULL pointer crash.
      
      This patch fixes this crash by moving the start of timer after everything
      is setup.
      
      backtrace shows following
      
      PID: 3720   TASK: ffff996928401040  CPU: 0   COMMAND: "qla2xxx_1_dpc"
      0 [ffff99652751b698] __schedule at ffffffff965676c7
      1 [ffff99652751b728] schedule at ffffffff96567bc9
      2 [ffff99652751b738] schedule_timeout at ffffffff965655e8
      3 [ffff99652751b7e0] io_schedule_timeout at ffffffff9656726d
      4 [ffff99652751b810] congestion_wait at ffffffff95fd8d12
      5 [ffff99652751b870] isolate_migratepages_range at ffffffff95fddaf3
      6 [ffff99652751b930] compact_zone at ffffffff95fdde96
      7 [ffff99652751b980] compact_zone_order at ffffffff95fde0bc
      8 [ffff99652751ba20] try_to_compact_pages at ffffffff95fde481
      9 [ffff99652751ba80] __alloc_pages_direct_compact at ffffffff9655cc31
      10 [ffff99652751bae0] __alloc_pages_slowpath at ffffffff9655d101
      11 [ffff99652751bbd0] __alloc_pages_nodemask at ffffffff95fc0e95
      12 [ffff99652751bc80] dma_generic_alloc_coherent at ffffffff95e3217f
      13 [ffff99652751bcc8] x86_swiotlb_alloc_coherent at ffffffff95e6b7a1
      14 [ffff99652751bcf8] qla2x00_rft_id at ffffffffc055b5e0 [qla2xxx]
      15 [ffff99652751bd50] qla2x00_loop_resync at ffffffffc0533e71 [qla2xxx]
      16 [ffff99652751be68] qla2x00_do_dpc at ffffffffc05210ca [qla2xxx]
      
      PID: 0      TASK: ffffffff96a18480  CPU: 0   COMMAND: "swapper/0"
       0 [ffff99652fc03ae0] machine_kexec at ffffffff95e63674
       1 [ffff99652fc03b40] __crash_kexec at ffffffff95f1ce12
       2 [ffff99652fc03c10] crash_kexec at ffffffff95f1cf00
       3 [ffff99652fc03c28] oops_end at ffffffff9656c758
       4 [ffff99652fc03c50] no_context at ffffffff9655aa7e
       5 [ffff99652fc03ca0] __bad_area_nosemaphore at ffffffff9655ab15
       6 [ffff99652fc03cf0] bad_area_nosemaphore at ffffffff9655ac86
       7 [ffff99652fc03d00] __do_page_fault at ffffffff9656f6b0
       8 [ffff99652fc03d70] do_page_fault at ffffffff9656f915
       9 [ffff99652fc03da0] page_fault at ffffffff9656b758
          [exception RIP: unknown or invalid address]
          RIP: 0000000000000000  RSP: ffff99652fc03e50  RFLAGS: 00010202
          RAX: 0000000000000000  RBX: ffff99652b79a600  RCX: ffff99652b79a760
          RDX: ffff99652b79a600  RSI: ffffffffc0525ad0  RDI: ffff99652b79a600
          RBP: ffff99652fc03e60   R8: ffffffff96a18a18   R9: ffffffff96ee3c00
          R10: 0000000000000002  R11: ffff99652fc03de8  R12: ffff99652b79a760
          R13: 0000000000000100  R14: ffffffffc0525ad0  R15: ffff99652b79a600
          ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
      10 [ffff99652fc03e50] qla2x00_sp_timeout at ffffffffc0525af8 [qla2xxx]
      11 [ffff99652fc03e68] call_timer_fn at ffffffff95ea7f58
      12 [ffff99652fc03ea0] run_timer_softirq at ffffffff95eaa3bd
      13 [ffff99652fc03f18] __do_softirq at ffffffff95ea0f05
      14 [ffff99652fc03f88] call_softirq at ffffffff9657832c
      15 [ffff99652fc03fa0] do_softirq at ffffffff95e2e675
      16 [ffff99652fc03fc0] irq_exit at ffffffff95ea1285
      17 [ffff99652fc03fd8] smp_apic_timer_interrupt at ffffffff965796c8
      18 [ffff99652fc03ff0] apic_timer_interrupt at ffffffff96575df2
      Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      3a4b6cc7
    • Quinn Tran's avatar
      scsi: qla2xxx: Fix Relogin to prevent modifying scan_state flag · 8b5292bc
      Quinn Tran authored
      Relogin fails to move forward due to scan_state flag indicating device is
      not there. Before relogin process, Session delete process accidently
      modified the scan_state flag.
      
      [mkp: typos plus corrected Fixes: sha as reported by sfr]
      
      Fixes: 2dee5521 ("scsi: qla2xxx: Fix login state machine freeze")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
      Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      8b5292bc
  3. 30 Jul, 2019 17 commits
  4. 22 Jul, 2019 2 commits