Support for the ib_srpt_target_<n> target port names was removed in 2015.
Update the documentation that still uses this target port name format.
Remove all references to the obsolete ib_srpt kernel module parameters
use_port_guid_in_session_name and use_node_guid_in_target_name. Remove
the references from srpt/README to target port name formats that are no
longer supported.
This patch fixes the following Coverity complaint:
CID 275306 (#1 of 1): Resource leak (RESOURCE_LEAK)
Variable cwrp going out of scope leaks the storage it points to.
In the scst_cmp_wr_local() function, we don't free 'cwrp' if the next
check after the memory allocation fails. Hence move this check before
allocating memory.
Fixes: 4525b04b2 ("scst: Reject inconsistent COMPARE AND WRITE commands")
The GitHub virtual environment provides Ubuntu with a kernel that doesn't
support FCoE, causing the build to fail:
ERROR: modpost: "fc_seq_release" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_fc4_register_provider" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_lport_iterate" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_seq_els_rsp_send" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_seq_assign" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "_fc_frame_alloc" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_fill_reply_hdr" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_exch_done" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_fc4_deregister_provider" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
ERROR: modpost: "fc_frame_alloc_fill" [/root/gleb/SCST/scst/fcst/fcst.ko] undefined!
WARNING: modpost: suppressed 4 unresolved symbol warnings because there were too many)
Ignore these errors and continue building SCST to get all the information
for analysis.
We should clear sysfs during copy manager device registration failure.
Otherwise, we will not be able to re-register this device, since the
sysfs for it has already been created.
1. scst_cm_send_init_inquiry() gets a reference on struct scst_device, but
doesn't put it in case of an error, so this may cause a reference leak.
2. scst_cm_init_inq_finish() shouldn't put a reference on struct
scst_device during the retry, since we have to hold the reference as
long as there is a pointer to struct scst_device in the priv field.
Otherwise, the retry command will run without holding the reference.
Fixes: ec3c6b5a ("scst_copy_mgr, initial inquiry: Hold a reference on
struct scst_device")
Most targets of this Makefile require a underlying Makefile to be
created before they are called. Otherwise you will get an error like
this:
make -C scst-1.0.0 clean
make[3]: Entering directory '/.../scst/scstadmin/scstadmin.sysfs/scst-1.0.0'
make[3]: *** No rule to make target 'clean'. Stop.
Hence add a target that creates a underlying Makefile and add it as a
dependency for all required targets.
Currently we have several places where activating/deactivating of
virtual device happens:
1. sysfs 'active' attribute
2. on_alua_state_change_*() callback functions
They all use the same code to activate/deactivate virtual device.
Hence introduce the new vdisk_activate_dev() and vdisk_disable_dev()
helpers in order to reduce code duplication.
This patch doesn't change any functionality.
The use of the on_alua_state_change_*() callback functions was changed in
commit d333ce82 ("Restore the on_alua_state_change_*() callback functions")
in a such way that they are now only invoked if the state of a local target
port group is being modified.
But when compared to the old implementation, which was removed in commit
29548a4a ("scst: Remove the on_alua_state_change_*() callback functions"),
they won't be invoked for devices that do not have target devices, or have
only those that aren't included in the target group.
Hence additionally invoke these callbacks for such devices if the state of
a local target port group is being modified.
Fixes: https://github.com/SCST-project/scst/issues/55
This patch should fix the following bug:
iscsi-scst: ***ERROR***: Sending data failed: initiator ..., write_size 0, write_state 1, res 0
iscsi-scst: ***CRITICAL ERROR***: 0 6 31
------------[ cut here ]------------
kernel BUG at /usr/src/packages/BUILD/scst-3.7.0.8695/iscsi-scst/kernel/nthread.c:1517!
invalid opcode: 0000 [#1] SMP NOPTI
CPU: 12 PID: 997595 Comm: iscsiwr0_14 ...
...
RIP: 0010:iscsi_send+0x877/0x8b0 [iscsi_scst]
Call Trace:
istwr+0x123/0x3b0 [iscsi_scst]
kthread+0x120/0x136
ret_from_fork+0x24/0x36
-------------------------------------
What happens:
- istwr() calls scst_do_job_wr().
- scst_do_job_wr() calls iscsi_send().
- iscsi_send() sets the 'res' variable to 0 during error
in one of three possible places:
iscsi_do_send(), tx_padding(), tx_ddigest().
- All of these functions call exit_tx() which sets conn->write_state to TX_END.
- After iscsi_send() has completed for the current iteration, the next time
it processes iscsi_conn with conn->write_state == TX_END,
which will call BUG() in the switch default case.
Therefore, remove the res == 0 check in iscsi_send() to handle TX_END state.
Fixes: https://github.com/SCST-project/scst/issues/12
Suppress the following (false positive) Coverity complaint:
CID 271578 (#1 of 1): Dereference after null check (FORWARD_NULL)
var_deref_model: Passing null pointer (*ref_cmd).scst_cmd to
scst_set_delivery_status, which dereferences it
(*ref_cmd).scst_aen is set when (*ref_cmd).scst_state == ISCSI_CMD_STATE_AEN
and vice versa, so the Coverity complaint is a false positive. Hence rewrite
the code to suppress this complaint and make the code cleaner.
This patch fixes the following Coverity complaint:
CID 271601 (#1 of 1): Uninitialized scalar variable (UNINIT)
uninit_use_in_call: Using uninitialized value req.
Field req.cid is uninitialized when calling iscsid_request.
This patch fixes the following Coverity complaint:
CID 271606 (#1 of 1): Uninitialized scalar variable (UNINIT)
uninit_use_in_call: Using uninitialized value event.
Field event.target_name is uninitialized when calling __event_send.
cppcheck reports
[drivers/scsi/qla2xxx/qla_mid.c:594]: (warning) Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?
[drivers/scsi/qla2xxx/qla_mid.c:620]: (warning) Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?
The functions qla25xx_free_req_que() and qla25xx_free_rsp_que() are
similar. They free a 'req' and a 'rsp' parameter respectively. The last
statement of both functions is setting the parameter to NULL. This has no
effect and can be removed.
Link: https://lore.kernel.org/r/20220521201607.4145298-1-trix@redhat.com
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Tom Rix <trix@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[ commit e250bd2699e0 upstream ]
Support for the following block layer changes in the Linux Kernel v5.19:
- 44abff2c0b97 ("block: decouple REQ_OP_SECURE_ERASE from REQ_OP_DISCARD")
- 70200574cc22 ("block: remove QUEUE_FLAG_DISCARD")
The legacy API wrappers in include/linux/pci-dma-compat.h should go away as
they create unnecessary midlayering for include/linux/dma-mapping.h API.
Instead use dma-mapping.h API directly.
This patch fixes build for linux kernel v5.18.
The old zero-copy implementation that used zero_copy flag was removed in
commit 19c9aec2 ("vdisk_fileio: Remove the page cache based zero-copy
implementation"). Hence remove this flag since it is no longer used.
By default the qlini_mode module parameter set initiator mode to 'enabled'.
This forces a SCST user to perform additional steps to activate the target mode.
Thus, change the default qlini_mode to simplify target mode usage, since
the SCST qla2xxx_scst module is usually only used with it.
Calling scst_cmd_init_done() with SCST_CONTEXT_DIRECT from
sqa_qla2xxx_handle_cmd() cause a SCST READ commands to stall for
scst_user devices.
The problem is that scst_user devices use udev_cmd_threads for processing
SCST commands, so it's necessary to call the scst_user dev handler
callbacks from the SCST_CONTEXT_THREAD context.
For write commands, this is already done because scst_rx_data() always
processes commands with a THREAD context. But for READ commands, it
depends on passing the preferred context value to scst_cmd_init_done().
So pass the SCST_CONTEXT_THREAD or SCST_CONTEXT_TASKLET to
scst_cmd_init_done(). SCST_CONTEXT_TASKLET would also work, because
the context optimization in scst_init_cmd() will still set SCST_CONTEXT_THREAD
for READ commands.
Reported-by: Eitan Cohen <eitancohen456@gmail.com>
If there are any NPIV targets, sqa_exit() will call
scst_unregister_target() twice on them. The first is an explicit call,
the other is triggered by qlt_del_vtarget().
Calling scst_unregister_target() twice on the same target will cause
crash:
RIP: 0010:sqa_target_release+0x19/0x220 [qla2x00tgt]
Call Trace:
scst_unregister_target+0x8e/0x330 [scst]
sqa_qla2xxx_remove_target+0x63/0x70 [qla2x00tgt]
qlt_release+0x1e0/0x260 [qla2xxx_scst]
qlt_remove_target+0x46/0x1d0 [qla2xxx_scst]
qla24xx_vport_delete+0x92/0x1e0 [qla2xxx_scst]
fc_vport_terminate+0x45/0x170 [scsi_transport_fc]
qlt_del_vtarget+0x142/0x15d [qla2x00tgt]
fc_vport_terminate+0x45/0x170 [scsi_transport_fc]
qlt_del_vtarget+0x142/0x15d [qla2x00tgt]
sqa_exit+0xad/0xde4 [qla2x00tgt]
Therefore, call scst_unregister_target() only from qlt_del_vtarget()
NPIV port deregistering processing is different from physical port
processing. We use the same handling for both of them, which causes
the crash when it's an NPIV port. Hence separate the common processing
logic depending on the type of port.
Reported-by: Rob Turk <robtu@rtist.nl>
Aborting commands that have already been sent to the firmware can
cause BUG in qlt_free_cmd(): BUG_ON(cmd->sg_mapped)
For instance:
- Command passes rdx_to_xfer state, maps sgl, sends to the firmware
- Reset occurs, qla2xxx performs ISP error recovery, aborts the command
- Target stack calls qlt_abort_cmd() and then qlt_free_cmd()
- BUG_ON(cmd->sg_mapped) in qlt_free_cmd() occurs because sgl was not
unmapped
Thus, unmap sgl in qlt_abort_cmd() for commands with the aborted flag set.
Link: https://lore.kernel.org/r/AS8PR10MB4952D545F84B6B1DFD39EC1E9DEE9@AS8PR10MB4952.EURPRD10.PROD.OUTLOOK.COM
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Gleb Chesnokov <Chesnokov.G@raidix.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[ commit 26f9ce53817a upstream ]
Google no longer support the use of third-party apps or devices which
ask you to sign in to your Google Account using only your username and
password. This causes problems when using github mail notification action
to send SCST patches. Hence, change the Google mail server to an another one.
There were 2 ways to create a set of sysfs files for a kobj_type,
through the default_attrs field, and the default_groups field.
The default_groups field was introduced in aa30f47cf666
("kobject: Add support for default attribute groups to kobj_type") # v5.2
The default_attrs field was dropped in cdb4f26a63c3
("kobject: kobj_type: remove default_attrs") # v5.18
Hence move the scst_sysfs sysfs code to use default_groups field
since Linux Kernel v5.2
There were 2 ways to create a set of sysfs files for a kobj_type,
through the default_attrs field, and the default_groups field.
The default_groups field was introduced in aa30f47cf666
("kobject: Add support for default attribute groups to kobj_type") # v5.2
The default_attrs field was dropped in cdb4f26a63c3
("kobject: kobj_type: remove default_attrs") # v5.18
Hence move the scst_mem sysfs code to use default_groups field
since Linux Kernel v5.2