03 Aug, 2018

1 commit


07 Jan, 2018

1 commit


01 Feb, 2017

1 commit


20 Apr, 2015

1 commit


04 Oct, 2014

1 commit

  • Add a LIO storage engine that presents commands to userspace for execution.
    This would allow more complex backstores to be implemented out-of-kernel,
    and also make experimentation a-la FUSE (but at the SCSI level -- "SUSE"?)
    possible.

    It uses a mmap()able UIO device per LUN to share a command ring and data
    area. The commands are raw SCSI CDBs and iovs for in/out data. The command
    ring is also reused for returning scsi command status and optional sense
    data.

    This implementation is based on Shaohua Li's earlier version but heavily
    modified. Differences include:

    * Shared memory allocated by kernel, not locked-down user pages
    * Single ring for command request and response
    * Offsets instead of embedded pointers
    * Generic SCSI CDB passthrough instead of per-cmd specialization in ring
    format.
    * Uses UIO device instead of anon_file passed in mailbox.
    * Optional in-kernel handling of some commands.

    The main reason for these differences is to permit greater resiliency
    if the user process dies or hangs.

    Things not yet implemented (on purpose):

    * Zero copy. The data area is flexible enough to allow page flipping or
    backend-allocated pages to be used by fabrics, but it's not clear these
    are performance wins. Can come later.
    * Out-of-order command completion by userspace. Possible to add by just
    allowing userspace to change cmd_id in rsp cmd entries, but currently
    not supported.
    * No locks between kernel cmd submission and completion routines. Sounds
    like it's possible, but this can come later.
    * Sparse allocation of mmaped area. Current code vmallocs the whole thing.
    If the mapped area was larger and not fully mapped then the driver would
    have more freedom to change cmd and data area sizes based on demand.

    Current code open issues:

    * The use of idrs may be overkill -- we maybe can replace them with a
    simple counter to generate cmd_ids, and a hash table to get a cmd_id's
    associated pointer.
    * Use of a free-running counter for cmd ring instead of explicit modulo
    math. This would require power-of-2 cmd ring size.

    (Add kconfig depends NET - Randy)

    Signed-off-by: Andy Grover
    Signed-off-by: Nicholas Bellinger

    Andy Grover
     

18 Jan, 2014

2 commits

  • This patch adds blk_integrity passthrough support for block_device
    backends using IBLOCK.

    This includes iblock_alloc_bip() + setup of bio_integrity_payload
    information that attaches to the leading struct bio once bio_list
    is populated during fast-path iblock_execute_rw() I/O dispatch.

    It also updates setup in iblock_configure_device() to detect modes
    of protection + se dev->dev_attrib.pi_prot_type accordingly, along
    with creating required bio_set integrity mempools.

    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for DIF read/write verify emulation
    for TARGET_DIF_TYPE1_PROT + TARGET_DIF_TYPE3_PROT operation.

    This includes sbc_dif_verify_write() + sbc_dif_verify_read()
    calls accessable by backend drivers to perform DIF verify
    for SGL based data and protection information.

    Also included is sbc_dif_copy_prot() logic to copy protection
    information to/from backend provided protection SGLs.

    Based on scsi_debug.c DIF TYPE1+TYPE3 emulation.

    v2 changes:
    - 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()

    Cc: Martin K. Petersen
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

10 May, 2012

1 commit

  • The FireWire SBP-2 Target is a driver for using an IEEE-1394 connection
    as a SCSI transport. This module uses the SCSI Target framework to
    expose LUNs to other machines attached to a FireWire bus, in effect
    acting as a FireWire hard disk similar to FireWire Target Disk mode
    on many Apple computers.

    This commit contains the squashed pull from Chris Boot's SBP-2-Target:

    https://github.com/bootc/Linux-SBP-2-Target.git patch-v3

    firewire-sbp-target: Add sbp_base.h header
    firewire-sbp-target: Add sbp_configfs.c
    firewire-sbp-target: Add sbp_fabric.{c,h}
    firewire-sbp-target: Add sbp_management_agent.{c,h}
    firewire-sbp-target: Add sbp_login.{c,h}
    firewire-sbp-target: Add sbp_target_agent.{c,h}
    firewire-sbp-target: Add sbp_scsi_cmnd.{c,h}
    firewire-sbp-target: Add to target Kconfig and Makefile

    Also add bootc's entry to the MAINTAINERS file. Great work Chris !!

    Signed-off-by: Chris Boot
    Acked-by: Stefan Richter
    Cc: Andy Grover
    Cc: Clemens Ladisch
    Signed-off-by: Nicholas Bellinger

    Chris Boot
     

26 Jul, 2011

1 commit

  • The Linux-iSCSI.org target module is a full featured in-kernel
    software implementation of iSCSI target mode (RFC-3720) for the
    current WIP mainline target v4.1 infrastructure code for the v3.1
    kernel. More information can be found here:

    http://linux-iscsi.org/wiki/ISCSI

    This includes support for:

    * RFC-3720 defined request / response state machines and support for
    all defined iSCSI operation codes from Section 10.2.1.2 using libiscsi
    include/scsi/iscsi_proto.h PDU definitions
    * Target v4.1 compatible control plane using the generic layout in
    target_core_fabric_configfs.c and fabric dependent attributes
    within /sys/kernel/config/target/iscsi/ subdirectories.
    * Target v4.1 compatible iSCSI statistics based on RFC-4544 (iSCSI MIBS)
    * Support for IPv6 and IPv4 network portals in M:N mapping to TPGs
    * iSCSI Error Recovery Hierarchy support
    * Per iSCSI connection RX/TX thread pair scheduling affinity
    * crc32c + crc32c_intel SSEv4 instruction offload support using libcrypto
    * CHAP Authentication support using libcrypto
    * Conversion to use internal SGl allocation with iscsit_alloc_buffs() ->
    transport_generic_map_mem_to_cmd()

    (nab: Fix iscsi_proto.h struct scsi_lun usage from linux-next in commit:
    iscsi: Use struct scsi_lun in iscsi structs instead of u8[8])
    (nab: Fix 32-bit compile warnings)

    Reviewed-by: Christoph Hellwig
    Reviewed-by: Andy Grover
    Acked-by: Roland Dreier
    Signed-off-by: Nicholas A. Bellinger

    Nicholas Bellinger
     

17 May, 2011

1 commit

  • This is a comprehensive patch for FC-FC4 provider. tcm_fc is a FC-FC4
    provider which glues target core (TCM) with Fiber channel library
    (libfc). tcm_fc uses existing FC4 provider hooks from Fiber channel
    library. This Fiber channel library is used by FCoE (transport - FC
    over Ethernet) protocol driver as well.

    Combination of modules such as Fiber channel library, tcm_fc, TCM
    target core, and FCoE protocol driver enables functional FCoE target.

    This patch includes initial commit for tcm_fc plus additional
    enhancement, bug fixes.

    This tcm_fc module essentially contains 3 entry points such as "prli",
    "prlo", "recv". When process login request (ELS_PRLI) request is
    received, Fiber channel library (libfc) module calls passive providers
    (FC-FC4, tcm_fc) (if any registered) "prli" function. Likewise when
    LOGO request is received, "prlo" function of passive provider is
    invoked by libfc. For all other request (e.g. any read/write, task
    management, LUN inquiry commands), "recv" function of passiver
    provider is invoked by libfc. Those passive providers "prli, prlo,
    recv" functions interact with TCM target core for requested operation.

    This module was primarily developed by "Joe Eykholt" and there were
    significant contributions from the people listed under signed-off.

    Signed-off-by: Joe Eykholt
    Signed-off-by: Nicholas A. Bellinger
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Yi Zou
    Signed-off-by: Kiran Patil

    Acked-by: Robert Love
    Signed-off-by: James Bottomley
    Signed-off-by: James Bottomley

    Kiran Patil
     

24 Mar, 2011

1 commit

  • This patch adds the TCM_Loop Linux/SCSI LLD fabric module for
    accessing TCM device backstores as locally accessable SCSI LUNs in
    virtual SAS, FC, and iSCSI Target ports using the generic fabric
    TransportID and Target Port WWN naming handlers from TCM's
    target_core_fabric_lib.c The TCM_Loop module uses the generic fabric
    configfs infratructure provided by target_core_fabric_configfs.c and
    adds a module dependent attribute for the creation/release of the
    virtual I_T Nexus connected the TCM_Loop Target and Initiator Ports.

    TCM_Loop can also be used with scsi-generic and BSG drivers so that
    STGT userspace fabric modules, QEMU-KVM and other hypervisor SCSI
    passthrough support can access TCM device backstore and control CDB
    emulation.

    For more information please see:

    http://linux-iscsi.org/wiki/Tcm_loop

    [jejb: fixed up checkpatch stuff]
    Signed-off-by: Nicholas A. Bellinger
    Reviewed-by: Christoph Hellwig
    Signed-off-by: James Bottomley

    Nicholas Bellinger
     

15 Jan, 2011

1 commit

  • LIO target is a full featured in-kernel target framework with the
    following feature set:

    High-performance, non-blocking, multithreaded architecture with SIMD
    support.

    Advanced SCSI feature set:

    * Persistent Reservations (PRs)
    * Asymmetric Logical Unit Assignment (ALUA)
    * Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
    * Full Error Recovery (ERL=0,1,2)
    * Active/active task migration and session continuation (ERL=2)
    * Thin LUN provisioning (UNMAP and WRITE_SAMExx)

    Multiprotocol target plugins

    Storage media independence:

    * Virtualization of all storage media; transparent mapping of IO to LUNs
    * No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
    * Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.

    Standards compliance:

    * Full compliance with IETF (RFC 3720)
    * Full implementation of SPC-4 PRs and ALUA

    Significant code cleanups done by Christoph Hellwig.

    [jejb: fix up for new block bdev exclusive interface. Minor fixes from
    Randy Dunlap and Dan Carpenter.]
    Signed-off-by: Nicholas A. Bellinger
    Signed-off-by: James Bottomley

    Nicholas Bellinger