Commit Graph

7216 Commits

Author SHA1 Message Date
Bart Van Assche
cbce3d8fbb Merge branch 'svn-trunk' 2019-09-05 20:43:35 -07:00
Bart Van Assche
410c462405 scst_copy_mgr: Fix copy manager LUN wraparound
This patch has been provided by Alexander Sinditskiy. See also
https://sourceforge.net/p/scst/tickets/27/.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8575 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-09-06 03:38:38 +00:00
Bart Van Assche
cc5a257003 Merge branch 'svn-trunk' 2019-08-25 17:49:01 -07:00
Bart Van Assche
df08f74e7e qla2x00t-32gbit: Fix a format string in a debug message
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8574 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:48:03 +00:00
Bart Van Assche
cae4c3ce24 qla2x00t-32gbit: Use %<n>phC where appropriate.
This patch reverts commit d20be1897c ("qla2x00t-32gbit: Avoid using the
format specifier %*phC") / r8166.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8573 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:44:52 +00:00
Bart Van Assche
d17134bc20 qla2x00t-32gbit: Complain loudly if attempting to build against an unsupported kernel
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8572 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:26:42 +00:00
Bart Van Assche
9267f92ba5 scripts/generate-kernel-patch: Only select new QLogic driver for kernel versions >= 3.15
A recent change (.cmd_size in the SCSI host template) increased the
minimal kernel version required for qla2x00t-32gbit. Update
scripts/generate-kernel-patch.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8571 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:25:58 +00:00
Bart Van Assche
1d2a50ecaa scripts/run-regression-tests: Suppress several gcc 9 compiler warnings
Suppress several gcc 9 compiler warnings for kernel versions before v5.1.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8570 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:24:45 +00:00
Bart Van Assche
7a7f467adc qla2x00t-32gbit: Fix a race condition
This patch fixes the following kernel complaint:

WARNING: CPU: 7 PID: 16514 at kernel/workqueue.c:3031 __flush_work.cold+0x1f/0x29
Workqueue: qla2xxx_wq qla2x00_iocb_work_fn [qla2xxx_scst]
RIP: 0010:__flush_work.cold+0x1f/0x29
Call Trace:
 flush_work+0x14/0x20
 qla24xx_do_nack_work+0x84/0x150 [qla2xxx_scst]
 qla2x00_do_work+0x50b/0x17e0 [qla2xxx_scst]
 qla2x00_iocb_work_fn+0x96/0x100 [qla2xxx_scst]
 process_one_work+0x56d/0xac0
 worker_thread+0x7a/0x5d0
 kthread+0x1bc/0x210
 ret_from_fork+0x24/0x30



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8569 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-26 00:24:07 +00:00
Bart Van Assche
521c0261ec iscsi-scst/conftest/bad_wr_mod: Fix a Coverity complaint
Fix the following Coverity complaint:

CID 326815 (#1 of 1): Explicit null dereferenced (FORWARD_NULL)
2. var_deref_model: Passing null pointer qp to ib_post_recv, which dereferences it.



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8568 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 22:55:48 +00:00
Bart Van Assche
59641c1d5f scst: Fix a memory leak
Fix the following Coverity complaint:

CID 344744 (#1 of 1): Resource leak (RESOURCE_LEAK)5. leaked_storage: Variable sioc going out of scope leaks the storage it points to.




git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8567 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 22:55:20 +00:00
Bart Van Assche
9e0914d470 scst_vdisk: Fix a Coverity complaint about integer overflow
Fix the following Coverity complaint:

CID 347914 (#1 of 1): Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)overflow_before_widen: Potentially overflowing expression blocks << cmd->dev->block_shift - 9 with type uint32_t (32 bits, unsigned) is evaluated using 32-bit arithmetic, and then used in a context that expects an expression of type sector_t (64 bits, unsigned).
    
To avoid overflow, cast blocks to type sector_t.


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8566 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 22:54:55 +00:00
Bart Van Assche
8f033f3f9d scst: Backport scsi_cmd_priv()
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8565 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 22:54:15 +00:00
Bart Van Assche
c205138e87 scripts: Fix multiple shellcheck warnings
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8564 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 22:51:57 +00:00
Bart Van Assche
ee24c6bab2 nightly build: Update kernel versions
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8563 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 14:02:33 +00:00
Bart Van Assche
839e365166 Merge branch 'svn-trunk' 2019-08-24 20:22:00 -07:00
Bart Van Assche
0dc0a43a08 qla2x00t-32gbit: Minimize diffs with trunk
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8562 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:21:06 +00:00
Bart Van Assche
7970005b40 qla2x00t-32gbit: Check sp->fcport->deleted again in qla2xxx_eh_abort()
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8561 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:11:04 +00:00
Bart Van Assche
787bd29c97 qla2xxx: Fix a NULL pointer dereference
BUG: KASAN: null-ptr-deref in qla24xx_handle_plogi_done_event+0x134/0x9f0 [qla2xxx]
Read of size 4 at addr 00000000000000a0 by task swapper/2/0

CPU: 2 PID: 0 Comm: swapper/2 Not tainted 5.2.0-dbg+ #1
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
Call Trace:
 <IRQ>
 dump_stack+0x8a/0xd6
 __kasan_report.cold+0x5/0x41
 kasan_report+0x16/0x20
 __asan_load4+0x7e/0x80
 qla24xx_handle_plogi_done_event+0x134/0x9f0 [qla2xxx]
 qla2x00_els_dcmd2_sp_done+0x15f/0x230 [qla2xxx]
 qla24xx_els_ct_entry+0x3b3/0x610 [qla2xxx]
 qla24xx_process_response_queue+0x514/0x10e0 [qla2xxx]
 qla24xx_msix_rsp_q+0x80/0x100 [qla2xxx]
 __handle_irq_event_percpu+0x72/0x450
 handle_irq_event_percpu+0x74/0xf0
 handle_irq_event+0x5e/0x8f
 handle_edge_irq+0x13a/0x320
 handle_irq+0x30/0x40
 do_IRQ+0x91/0x190
 common_interrupt+0xf/0xf
 </IRQ>
RIP: 0010:default_idle+0x31/0x230

[ commit d1436e456b840162eb4d162f99055d2adb79a566 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8560 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:09:55 +00:00
Bart Van Assche
134a9fec1a qla2x00t-32gbit: Cleanup trace buffer initialization
Avoid code duplication between qla2x00_alloc_offload_mem() and
qla2x00_alloc_fw_dump() by moving the FCE and EFT buffer allocation and
initialization to separate functions. Cleanly track failure and success by
making sure that the ha->eft, ha->fce and respective eft_dma, fce_dma
members are set if and only if the buffers are properly allocated and
initialized. Avoid pointless buffer reallocation.  Eliminate some goto
statements. Make sure the fce_enabled flag is cleared when the FCE buffer
is freed.

[ commit 3cf92f4bfccbb3e378cd86dc46e09c2bc18cda26 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8559 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:08:18 +00:00
Bart Van Assche
51d92beed3 qla2x00t-32gbit: qla2x00_alloc_fw_dump: set ha->eft
In qla2x00_alloc_fw_dump(), an existing EFT buffer (e.g. from previous
invocation of qla2x00_alloc_offload_mem()) is freed.  The buffer is then
re-allocated, but without setting the eft and eft_dma fields to the new
values.

[ commit edbd56472a636ab396f5ee6783e8438fa725a6ee upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8558 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:07:02 +00:00
Bart Van Assche
b964872cb8 qla2x00t-32gbit: Fix hang in fcport delete path
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

[ commit f00b3428a801 upstream ]



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8557 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:03:55 +00:00
Bart Van Assche
0baeaf170c qla2x00t-32gbit: Fix qla24xx_async_abort_cmd()
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8556 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:02:56 +00:00
Bart Van Assche
a3c05add05 qla2x00t-32gbit: Make sure that aborted commands are freed
[ commit e43842016685a31d1a036891ffdbae647539aa27 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8555 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:02:27 +00:00
Bart Van Assche
d1367ce124 qla2x00t-32gbit: Fix two function headers
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8554 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 03:01:32 +00:00
Bart Van Assche
32aefe4307 qla2x00t-32gbit: Fix-up for r8552
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8553 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:45:48 +00:00
Bart Van Assche
a2cefa63a9 qla2x00t-32gbit: Inline the qla2x00_fcport_event_handler() function
Instead of calling qla2x00_fcport_event_handler() and letting the switch
statement inside that function decide which other function to call, call
the latter function directly. Remove the event member from the event_arg
structure because it is no longer needed. Remove the
qla_handle_els_plogi_done() function because it is never called.

[ commit 897def2004213636ffe2e9ee6a75660c5b53b03d upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8552 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:38:32 +00:00
Bart Van Assche
446ae45661 qla2x00t-32gbit: Report invalid mailbox status codes
It is easy to mix up the QLA_* and the MBS_* status codes. Complain loudly
if that happens.

[ commit 724361921f65a40ae5b80641dc1e92c0ff314d89 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8551 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:37:55 +00:00
Bart Van Assche
cddc0c892d qla2x00t-32gbit: Remove superfluous sts_entry_* casts
The C language supports implicit casting of void pointers to non-void
pointers. Remove explicit sts_entry_* casts that are not necessary.

[ commit 1a20719e074ada3e6d06ee065afd527779a6793b upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8550 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:37:29 +00:00
Bart Van Assche
f5a2e51016 qla2x00t-32gbit: Let the compiler check the type of the SCSI command context pointer
Split srb_cmd.ctx into two pointers such that the compiler can check the
type of that pointer.

[ commit 5ec9f9040f61dfd0412a53fa2fc1e321727a5a61 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8549 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:36:49 +00:00
Bart Van Assche
72cc459a40 qla2x00t-32gbit: Complain if sp->done() is not called from the completion path
Not calling sp->done() from the command completion path is a severe bug.
Hence complain loudly if that happens.

[ commit 88263208dd23327b56fbd7c2858c389c1153b366 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8548 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:36:13 +00:00
Bart Van Assche
1f88b95c15 qla2x00t-32gbit: Introduce qla2xxx_get_next_handle()
This patch reduces code duplication.
    
[ commit bcc856574356df2eb5eb2d4491e7205339e55728 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8547 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:35:42 +00:00
Bart Van Assche
bc7f5b55fb qla2x00t-32gbit: Fix a race condition between aborting and completing a SCSI command
Instead of allocating a struct srb dynamically from inside .queuecommand(),
set qla2xxx_driver_template.cmd_size such that struct scsi_cmnd and struct
srb are contiguous. Do not call QLA_QPAIR_MARK_BUSY() /
QLA_QPAIR_MARK_NOT_BUSY() for SRBs associated with SCSI commands. That is
safe because scsi_remove_host() is called before queue pairs are deleted
and scsi_remove_host() waits for all outstanding SCSI commands to finish.

[ commit 85cffefa09e448906a6f0bc20f422d75a18675bd upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8546 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:34:53 +00:00
Bart Van Assche
7d3e856e61 qla2x00t-32gbit: Introduce the function qla2xxx_init_sp()
This patch does not change any functionality but makes the next patch
easier to read.

[ commit bdb61b9b944d1e5b7cee5a9fe21014363c55b811 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8545 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:34:07 +00:00
Bart Van Assche
41d4d6316b qla2x00t-32gbit: Enable type checking for the SRB free and done callback functions
Since all pointers passed to the srb_t.done() and srb_t.free() functions
have type srb_t, change the type of the first argument of these functions
from void * into struct srb *. This allows the compiler to verify the
argument types for these functions. This patch does not change any
functionality.

[ commit 6c18a43e3c82b0b67531a1cdec7ba31540fe6424 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8544 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:33:13 +00:00
Bart Van Assche
dc61adfa3a qla2x00t-32gbit: Use be_id_t etc. in more code
[ commit df95f39ae76474d922d9be9c0260dc263c451b09 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8543 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:31:44 +00:00
Bart Van Assche
790661121f qla2x00t-32gbit: Use strlcpy() instead of strncpy()
[ commit cc74049f35e8 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8542 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:25:18 +00:00
Bart Van Assche
6ee78e839e qla2x00t-32gbit: Suppress a recently introduced kernel warning
Fixes: 6ab417a5ef ("qla2x00t-32gbit: Always check the qla2x00_wait_for_hba_online() return value").



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8541 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:20:58 +00:00
Bart Van Assche
0ff3d58d02 qla2x00t-32gbit: Use tabs instead of spaces for indentation
This patch only modifies whitespace.

[ commit 0184793df2e860534380a66aa76b8807e71188c2 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8540 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:14:43 +00:00
Bart Van Assche
12ca81c338 qla2x00t-32gbit: Fix up a misapplied patch
Not sure why 'patch' misapplied a patch ...


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8539 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:09:18 +00:00
Bart Van Assche
9bfb9931ee qla2x00t-32gbit: Really fix qla2xxx_eh_abort()
I'm not sure how this happened but the patch that was intended to fix abort
handling was incomplete. This patch fixes that patch as follows:

 - If aborting the SCSI command failed, wait until the SCSI command
   completes.

 - Return SUCCESS instead of FAILED if an abort attempt races with SCSI
   command completion.

 - Since qla2xxx_eh_abort() increments the sp reference count by calling
   sp_get(), decrement the sp reference count before returning.

Fixes: 1b4ae64d8da6 ("qla2xxx: Fix a race condition between aborting and completing a SCSI command")

[ commit 8dd9593cc07ad7d999bef81b06789ef873a94881 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8538 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 02:04:12 +00:00
Bart Van Assche
5499f34f22 qla2x00t-32gbit: Make qla2x00_abort_srb() again decrease the sp reference count
Since qla2x00_abort_srb() starts with increasing the reference count of
@sp, decrease that same reference count before returning.

[ commit d2d2b5a5741d317bed1fa38211f1f3b142d8cf7a upstram ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8537 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:59:09 +00:00
Bart Van Assche
5c7951c8d9 qla2x00t-32gbit: Update driver version to 10.01.00.18-k
[ commit 4d0b32b853f52760bf70288f2751d2ca86581352 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8536 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:58:24 +00:00
Bart Van Assche
aa2356632e qla2x00t-32gbit: Allow NVMe IO to resume with short cable pull
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.

[ commit 03cc44bf682af289d6536eb911e928b415bd0e1f upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8535 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:57:50 +00:00
Bart Van Assche
21dc61fb60 qla2x00t-32gbit: Use common update-firmware-options routine for ISP27xx+
Leverage the generic routine, qla24xx_update_fw_options(), for the
configuration of firmware options for ISP27xx/ISP28xx.

[ commit a36f1443e6fc738c1bcfc4be80d6f1609163c614 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8534 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:55:29 +00:00
Bart Van Assche
89d0b88f67 qla2x00t-32gbit: Fix NVMe port discovery after a short device port loss
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<--

[ commit 9e744591ef1b8df27c25c68dac858dada8688f77 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8533 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:54:46 +00:00
Bart Van Assche
b29d9e15c4 qla2x00t-32gbit: Correct error handling during initialization failures
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.

[ commit 26a77799195f4ff105f877042012c7fb355b3da1 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8532 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:52:23 +00:00
Bart Van Assche
3991bf033b qla2x00t-32gbit: Retry fabric Scan on IOCB queue full
when fabric scan thread encounters IOCB Q Full, schedule a delayed work to
retry fabric scan.

[ commit f0cecc1eec0c24e790a4daac71858f1f14e6f7b5 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8531 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:51:03 +00:00
Bart Van Assche
4107c7164f qla2x00t-32gbit: Fix premature timer expiration
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

[ commit 3a4b6cc7332130ac5cbf3b505d8cddf0aa2ea745 upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8530 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:50:09 +00:00
Bart Van Assche
9bb911c130 qla2x00t-32gbit: Fix Relogin to prevent modifying scan_state flag
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.

[ commit 8b5292bcfcacf15182a77a973a98d310e76fd58b upstream ]


git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8529 d57e44dd-8a1f-0410-8b47-8ef2f437770f
2019-08-25 01:47:58 +00:00