[lkml]   [2014]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Subject[PATCH-v2 00/17] target: Add support for DIF Type1+Type3 emulation + passthrough
From: Nicholas Bellinger <>

Hi MKP & Co,

This -v2 series contains support for target mode DIF Type1+Type3
emulation within target core, FILEIO, and RAMDISK_MCP device backends,
BIP passthrough of T10 PI within IBLOCK device backends, and DIF/DIX
host support in the tcm_loop fabric driver.

DIF emulation is enabled via a new 'pi_prot_type' device attribute
within configfs for FILEIO + RAMDISK_MCP, which is set after initial
device configuration and before target fabric LUN export occurs.

For IBLOCK backends, protection support is automatically detected via
struct blk_integrity at configuration time, and no additional end-user
setup is required.

For FILEIO backends, format of protection information is exposed via
a new 'pi_prot_format' device attribute, that is used during initial
configuration to format a new $ file containing
DIF Type1/Type3 style metadata.

Also, the DIF read/write verify emulation has been made generic enough
so it can be used by other backend drivers (eg: FILEIO), as well as
Type4 (16-byte PI) in the near future.

Here is the v1 -> v2 changelog:

- Drop guard_type related definitions
- Update target_prot_op + target_prot_ho definitions (Sagi)
- Drop SCF_PROT + pi_prot_version flag
- Add se_subsystem_api->format_prot() (Sagi)
- Add hw_pi_prot_type device attribute
- Make sbc_check_prot defined as static (Fengguang + Wei)
- Remove unprotected READ/WRITE warning (mkp)
- Populate cmd->prot_type + friends (Sagi)
- Drop SCF_PROT usage
- Select CRC_T10DIF for TARGET_CORE in Kconfig (Fengguang)
- Drop IP checksum logic from sbc_dif_v1_verify (MKP)
- Fix offset on app_tag = 0xffff in sbc_dif_verify_read()
- Drop pi_guard_type + pi_prot_version related code (MKP)
- Add pi_prot_format logic (Sagi)
- Add ->free_prot callback in target_free_device
- Add hw_pi_prot_type read-only attribute
- Add target/iblock blk_integrity + BIP passthrough
- Add target/file DIF protection init/format support
- Add target/file DIF protection support to fd_execute_rw
- Drop unused sg_table from rd_release_device_space (Wei)
- Drop unused sg_table from rd_release_prot_space (Wei)
- Drop rd_release_prot_space call from rd_free_device
- Make rd_execute_rw() to u32 sectors count instead of sector_t

At this point the main TODO item remaining for v3.14 code is to determine
how best to propigate App/Guard/Reference Tag VERIFY failures back up
into IBLOCK device backend code.

MKP has an idea how to go about doing this that will be appearing as
a seperate SCSI-core + IBLOCK patch.

Thank you,


Nicholas Bellinger (17):
target: Add DIF related base definitions
target: Add DIF CHECK_CONDITION ASC/ASCQ exception cases
target/sbc: Add DIF setup in sbc_check_prot + sbc_parse_cdb
target/sbc: Add DIF TYPE1+TYPE3 read/write verify emulation
target/spc: Add protection bit to standard INQUIRY output
target/spc: Add protection related bits to INQUIRY EVPD=0x86
target/sbc: Add P_TYPE + PROT_EN bits to READ_CAPACITY_16
target/spc: Expose ATO bit in control mode page
target/configfs: Expose protection device attributes
target: Add protection SGLs to target_submit_cmd_map_sgls
target/iblock: Add blk_integrity + BIP passthrough support
target/file: Add DIF protection init/format support
target/file: Add DIF protection support to fd_execute_rw
target/rd: Refactor rd_build_device_space + rd_release_device_space
target/rd: Add support for protection SGL setup + release
target/rd: Add DIF protection into rd_execute_rw
tcm_loop: Enable DIF/DIX modes in SCSI host LLD

drivers/target/Kconfig | 2 +
drivers/target/loopback/tcm_loop.c | 12 +-
drivers/target/target_core_configfs.c | 12 ++
drivers/target/target_core_device.c | 89 +++++++++++
drivers/target/target_core_file.c | 256 +++++++++++++++++++++++++++++++-
drivers/target/target_core_file.h | 9 ++
drivers/target/target_core_iblock.c | 91 +++++++++++-
drivers/target/target_core_internal.h | 2 +
drivers/target/target_core_rd.c | 252 +++++++++++++++++++++++++------
drivers/target/target_core_rd.h | 4 +
drivers/target/target_core_sbc.c | 245 ++++++++++++++++++++++++++++++
drivers/target/target_core_spc.c | 27 ++++
drivers/target/target_core_transport.c | 46 +++++-
drivers/vhost/scsi.c | 2 +-
include/target/target_core_backend.h | 7 +
include/target/target_core_base.h | 47 ++++++
include/target/target_core_fabric.h | 3 +-
17 files changed, 1052 insertions(+), 54 deletions(-)


 \ /
  Last update: 2014-01-19 04:41    [W:0.278 / U:0.552 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site