mbox series

[v5,0/5] scsi: target: make RTPI an TPG identifier

Message ID 20230301084512.21956-1-d.bogdanov@yadro.com (mailing list archive)
Headers show
Series scsi: target: make RTPI an TPG identifier | expand

Message

Dmitry Bogdanov March 1, 2023, 8:45 a.m. UTC
The patchset based on 6.3/scsi-queue.

SAM-5 4.6.5.2 (Relative Port Identifier attribute) defines the attribute
as unique across SCSI target ports:
 The Relative Port Identifier attribute identifies a SCSI target port or
 a SCSI initiator port relative to other SCSI ports in a SCSI target
 device and any SCSI initiator devices contained within that SCSI target
 device. A SCSI target device may assign relative port identifiers to
 its SCSI target ports and any SCSI initiator ports. If relative port
 identifiers are assigned, the SCSI target device shall assign each of
 its SCSI target ports and any SCSI initiator ports a unique relative
 port identifier from 1 to 65 535. SCSI target ports and SCSI initiator
 ports share the same number space.

In the current TCM implementation, auto-incremented lun_rtpi weakly
follows the model outlined by SAM-5 and SPC-4. In case of multiple SCSI
target ports (se_portal_group's), which is common to scenario with
multiple HBAs or multiple iSCSI/FC targets, it's possible to have two
backstores (se_device's) with different values of lun_rtpi on the same
SCSI target port.

Similar issue happens during re-export. If a LUN of a backstore is
removed from a target port and added again to the same target port, RTPI
is incremented again and will be different from the first time.

The two issues happen because each se_device increments RTPI for its own
LUNs independently.

The behaviour means that a SCSI application client can't reliably make any
sense of RTPI values reported by a LUN as it's not really related to SCSI
target ports. A conforming target implementation must ensure that RTPI field is
unique per port. The patchset resolves the issue.

Make RTPI be part of se_tpg instead of se_lun. Make it configurable.

Changelog:
  v5:
    fix casting from config_item to se_tpg
  v4:
    move rtpi file from tpg_n/attrib to tpgt_n folder (drop 4th patch)
    use unused variable
    make se_tpg.tpg_rtpi variable u16 again
    revert occasional rename

  v3:
    make variable static
    change core_ prefix to target_
    split to tpg_enable/tpg_disable functions

  v2:
    use XArray for tracking RTPI instead of linked list
    do not allow to change RTPI on enabled target port
    drop not needed patches



Dmitry Bogdanov (2):
  scsi: target: core: Add RTPI field to target port
  scsi: target: core: Add RTPI attribute for target port

Roman Bolshakov (2):
  scsi: target: core: Use RTPI from target port
  scsi: target: core: Drop device-based RTPI

 drivers/target/target_core_alua.c            |  4 +-
 drivers/target/target_core_device.c          | 43 +-----------
 drivers/target/target_core_fabric_configfs.c | 44 ++++++++++--
 drivers/target/target_core_internal.h        |  3 +-
 drivers/target/target_core_pr.c              |  8 +--
 drivers/target/target_core_spc.c             |  2 +-
 drivers/target/target_core_stat.c            |  6 +-
 drivers/target/target_core_tpg.c             | 71 ++++++++++++++++++--
 include/target/target_core_base.h            |  7 +-
 9 files changed, 120 insertions(+), 68 deletions(-)

Comments

Mike Christie March 7, 2023, 5:33 p.m. UTC | #1
On 3/1/23 2:45 AM, Dmitry Bogdanov wrote:
> The patchset based on 6.3/scsi-queue.
> 

Reviwed-by: Mike Christie <michael.christie@oracle.com>
Martin K. Petersen March 10, 2023, 2:37 a.m. UTC | #2
Dmitry,

> SAM-5 4.6.5.2 (Relative Port Identifier attribute) defines the
> attribute as unique across SCSI target ports:
>  The Relative Port Identifier attribute identifies a SCSI target port
>  or a SCSI initiator port relative to other SCSI ports in a SCSI
>  target device and any SCSI initiator devices contained within that
>  SCSI target device. A SCSI target device may assign relative port
>  identifiers to its SCSI target ports and any SCSI initiator ports. If
>  relative port identifiers are assigned, the SCSI target device shall
>  assign each of its SCSI target ports and any SCSI initiator ports a
>  unique relative port identifier from 1 to 65 535. SCSI target ports
>  and SCSI initiator ports share the same number space.

Applied to 6.4/scsi-staging, thanks!
Martin K. Petersen March 17, 2023, 4:04 a.m. UTC | #3
On Wed, 01 Mar 2023 11:45:08 +0300, Dmitry Bogdanov wrote:

> The patchset based on 6.3/scsi-queue.
> 
> SAM-5 4.6.5.2 (Relative Port Identifier attribute) defines the attribute
> as unique across SCSI target ports:
>  The Relative Port Identifier attribute identifies a SCSI target port or
>  a SCSI initiator port relative to other SCSI ports in a SCSI target
>  device and any SCSI initiator devices contained within that SCSI target
>  device. A SCSI target device may assign relative port identifiers to
>  its SCSI target ports and any SCSI initiator ports. If relative port
>  identifiers are assigned, the SCSI target device shall assign each of
>  its SCSI target ports and any SCSI initiator ports a unique relative
>  port identifier from 1 to 65 535. SCSI target ports and SCSI initiator
>  ports share the same number space.
> 
> [...]

Applied to 6.4/scsi-queue, thanks!

[1/4] scsi: target: core: Add RTPI field to target port
      https://git.kernel.org/mkp/scsi/c/3f4b9cb4133a
[2/4] scsi: target: core: Use RTPI from target port
      https://git.kernel.org/mkp/scsi/c/b9e063adfb8a
[3/4] scsi: target: core: Drop device-based RTPI
      https://git.kernel.org/mkp/scsi/c/5fe99dace431
[4/4] scsi: target: core: Add RTPI attribute for target port
      https://git.kernel.org/mkp/scsi/c/31177b74790c