When dlm_new_lockspace is called with a NULL cluster_name the
kernel will emit an error message "dlm cluster name '%s' is being
used without an application provided cluster name".
Therefore, provide a mechanism to set a cluster_name and use it
when calling dlm_new_lockspace.
Make the SCST_VERSION_STRING macro revision-independent, because it
causes a version string mismatch for SCST-dependent modules where the
revision is not exported.
Fixes: a86e5c55ea ("Makefile, scst: Add revision to SCST version macro")
Fixes: https://github.com/SCST-project/scst/issues/130
In kernel commit 066ff571011d ("block: turn bio_kmalloc into a simple kmalloc
wrapper"), the order of arguments to bio_kmalloc changed, as did its semantics.
In kernel commit 772c8f6f3bbd ("Merge tag 'for-4.11/linus-merge-signed' * of
git://git.kernel.dk/linux-block") both scsi_init_rq and scsi_init_request
(later renamed to scsi_mq_init_request in e7008ff5c61a) initialize the
scsi_request sense buffer, so we don't need to (nor should) provide our own.
This patch fixes the following Coverity complaint:
CID 307352 (#1 of 1): Uninitialized pointer read (UNINIT)
uninit_use_in_call: Using uninitialized value arg when calling
kfree.
Fixes: 7ba5b11f0a ("scst_disk: Add cluster SCSI sync state mode
support to dev_disk")
Extend the cluster mode support that was first introduced in 9d61dc4b to
include dev_disk. This will facilitate the situation where the underlying
disk is another SCST target.
Add the cluster_mode control to the sysfs subtree for the dev_disk to permit
entering or exiting cluster mode.
In disk_attach issue a INQUIRY (Unit Serial Number VPD) to obtain the serial
number of the underlying disk. This is used when entering or exiting
cluster mode as the cl_dev_id parameter, which ultimately is used as part of
the DLM lockspace.
1. Correct a sentence where 'optimal transfer length' should read 'block size'.
2. Use '4194304' instead of '4 MB' when referring to a value of the parameter.
After a transport error, return "aborted command" sense data rather than
"medium error / write error" (which is more appropriate for a problem
writing to the disk / tape / physical medium).
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
When processing ABORT_TASK_SET, qla2xxx_scst passes the wrong LUN to
SCST, resulting in errors like:
sqatgt(7/0): Received task management cmd: lun=29, type=2, tag=0
sqatgt(7/0) ABORT_TS received.
[161]: scst: TM fn ABORT_TASK_SET/1 (mcmd 00000000d42b66dd, initiator c0:50:76:0b:e9:52:00:a2, target 21:00:00:24:ff:82:96:a5)
[10400]: scst: ***ERROR***: Corresponding device for LUN 7424 not found
(where 29 is the correct LUN and 7424 is bogus)
Fix by making LUN parsing for ABORT_TASK_SET the same as all the other
TMR cases.
Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
This patch should fix the following github warning:
Node.js 12 actions are deprecated. Please update the following
actions to use Node.js 16: actions/checkout@v2
While performing CPU hotplug, a crash with the following stack was seen:
Call Trace:
qla24xx_process_response_queue+0x42a/0x970 [qla2xxx]
qla2x00_start_nvme_mq+0x3a2/0x4b0 [qla2xxx]
qla_nvme_post_cmd+0x166/0x240 [qla2xxx]
nvme_fc_start_fcp_op.part.0+0x119/0x2e0 [nvme_fc]
blk_mq_dispatch_rq_list+0x17b/0x610
__blk_mq_sched_dispatch_requests+0xb0/0x140
blk_mq_sched_dispatch_requests+0x30/0x60
__blk_mq_run_hw_queue+0x35/0x90
__blk_mq_delay_run_hw_queue+0x161/0x180
blk_execute_rq+0xbe/0x160
__nvme_submit_sync_cmd+0x16f/0x220 [nvme_core]
nvmf_connect_admin_queue+0x11a/0x170 [nvme_fabrics]
nvme_fc_create_association.cold+0x50/0x3dc [nvme_fc]
nvme_fc_connect_ctrl_work+0x19/0x30 [nvme_fc]
process_one_work+0x1e8/0x3c0
On abort timeout, completion was called without checking if the I/O was
already completed.
Verify that I/O and abort request are indeed outstanding before attempting
completion.
Fixes: 71c80b75ce8f ("scsi: qla2xxx: Do command completion on abort timeout")
Reported-by: Marco Patalano <mpatalan@redhat.com>
Tested-by: Marco Patalano <mpatalan@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Link: https://lore.kernel.org/r/20221129092634.15347-1-njavali@marvell.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[ commit 68ad83188d78 upstream ]
bio_set_op_attrs has been removed, replace it with a direct
assignment of the flags to bio->bi_opf.
See also commit c34b7ac65087 ("block: remove bio_set_op_attrs") # v6.2.
Fix a regression introduced during d989aa91f3 ("scst_lib: Port to
Linux kernel v5.19") that breaks dev_disk operation.
The kernel function blk_execute_rq_nowait will set rq->end_io to the
done parameter, so pass in the existing rq->end_io rather than NULL
to prevent zeroing it.
Fixes: d989aa91f3 ("scst_lib: Port to Linux kernel v5.19")
[ glebchesn: added patch description ]
Unbreak the build for the previous commit against kernel versions
before v3.12.
Fixes: ee6312ac5a ("scst_vdisk, qla2x00t-32gbit: Use PTR_ERR_OR_ZERO
instead of IS_ERR and PTR_ERR")
scst_clear_aca_mcmd() can only return an error if
scst_set_mcmd_next_state() fails. In this case, the mcmd->state will be
SCST_MCMD_STATE_WAITING_AFFECTED_CMDS_DONE or
SCST_MCMD_STATE_WAITING_AFFECTED_CMDS_FINISH. Thus, a secondary call of
scst_set_mcmd_next_state() will match the default branch of the switch
statement, resulting in a crash.
Therefore, fix the error handling for scst_clear_aca_mcmd() to avoid
this case.
This patch fixes the following Coverity complaint:
CID 271592 (#1 of 1): Unused value (UNUSED_VALUE)
returned_value: Assigning value from scst_clear_aca_mcmd(mcmd) to
res here, but that stored value is overwritten before it can be
used.
This patch fixes the following Coverity complaint:
CID 271580 (#2 of 2): Uninitialized scalar variable (UNINIT)
uninit_use_in_call: Using uninitialized value mcp->tov when calling
ql_dbg.
This patch fixes the following Coverity complaint:
CID 275308 (#1-2 of 2): Uninitialized scalar variable (UNINIT)
uninit_use_in_call: Using uninitialized value
multi.multi_cmd.replies_done when calling fprintf.
Commit 9b3e0f4d4147 ("scsi: qla2xxx: Move work element processing out of
DPC thread") introduced the initialization of vha->iocb_work in
qla2x00_create_host() function.
This initialization is also called from qla2x00_probe_one() function, just
after qla2x00_create_host().
Hence remove this duplicate call since it has already been called before.
Signed-off-by: Gleb Chesnokov <gleb.chesnokov@scst.dev>
Link: https://lore.kernel.org/r/822b3823-f344-67d6-30f1-16e31cf68eed@scst.dev
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[ commit 3620e174d260 upstream ]
Fix the following two compiler warnings:
drivers/scsi/qla2xxx/qla_init.c: In function ‘qla24xx_async_abort_cmd’:
drivers/scsi/qla2xxx/qla_init.c:171:17: warning: variable ‘bail’ set but not used [-Wunused-but-set-variable]
171 | uint8_t bail;
| ^~~~
drivers/scsi/qla2xxx/qla_init.c: In function ‘qla2x00_async_tm_cmd’:
drivers/scsi/qla2xxx/qla_init.c:2023:17: warning: variable ‘bail’ set but not used [-Wunused-but-set-variable]
2023 | uint8_t bail;
| ^~~~
Cc: Arun Easi <arun.easi@qlogic.com>
Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
Fixes: feafb7b1714c ("[SCSI] qla2xxx: Fix vport delete issues")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20221031224818.2607882-1-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[ commit 4fb2169d66b8 upstream ]
All sysfs mgmt show functions print available parameters/attributes
without '.' at the end, except for scst_luns_mgmt_show(). So fix it.
This patch doesn't change any functionality.
The SCST device may receive several events almost simultaneously to
update its designators. Each such event calls scst_cm_update_dev(),
which frees all device designators in the global list and then submits
a inquiry that fills a new designators into the scst_cm_desig_list list.
This is racy because submiting the inquiry is asynchronous and can be
finished in another thread.
scst_cm_update_dev() 1 scst_cm_update_dev() 2
---------------------- ----------------------
[1] mutex_lock(&scst_mutex)
[2] scst_cm_send_init_inquiry(dev, lun, NULL)
[3] mutex_unlock(&scst_mutex)
[4] mutex_lock(&scst_mutex)
[5] scst_cm_dev_free_designators(dev)
[6] scst_cm_init_inq_finish()
[7] scst_cm_send_init_inquiry(dev, lun, NULL)
[8] mutex_unlock(&scst_mutex)
As a result we may get the scst_cm_desig_list list, which contains
SCST device designators from several inquiries.
Hence serialize scst_cm_desig_list list updates.
Introduce the helper function scst_cm_dev_free_designators(), which
purpose is to free copy manager designators for scst dev.
This patch doesn't change any functionality.
This patch should fix the following bug:
list_del corruption. next->prev should be ffff955cb1ea2540, but was ffff955c54a32440
------------[ cut here ]------------
kernel BUG at lib/list_debug.c:54!
invalid opcode: 0000 [#1] SMP PTI
Workqueue: events vdev_inq_changed_fn [scst_vdisk]
RIP: 0010:__list_del_entry_valid.cold+0x1d/0x47
Call Trace:
scst_cm_dev_unregister+0x66/0xd0 [scst]
scst_cm_update_dev+0x41/0xc0 [scst]
process_one_work+0x1ee/0x390
worker_thread+0x53/0x3e0
kthread+0x124/0x150
ret_from_fork+0x1f/0x30
scst_cm_desig_list is a global list for all SCST devices. It must be
protected with scst_cm_mutex because it can be modified by
scst_cm_init_inq_finish() from another thread when scst_cm_update_dev()
is called.
Fixes: https://github.com/SCST-project/scst/issues/99
Introduce the helper function scst_cm_get_free_lun(), which purpose is
to return the next free copy manager LUN.
This patch doesn't change any functionality.
Support for scst_tgt_template detect() method was declared obsolete
in 2015. Remove support for scst_tgt_template detect() method.
See also commit 4ac6d7a26d ("[PATCH] scst: Drop detect() method").