21 Dec, 2014

1 commit

  • Pull SCSI update from James Bottomley:
    "This is a much shorter set of patches that were on the go but didn't
    make it in to the early pull request for the merge window. It's
    really a set of bug fixes plus some final cleanup work on the new tag
    queue API"

    * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    storvsc: ring buffer failures may result in I/O freeze
    ipr: set scsi_level correctly for disk arrays
    ipr: add support for async scanning to speed up boot
    scsi_debug: fix missing "break;" in SDEBUG_UA_CAPACITY_CHANGED case
    scsi_debug: take sdebug_host_list_lock when changing capacity
    scsi_debug: improve driver description in Kconfig
    scsi_debug: fix compare and write errors
    qla2xxx: fix race in handling rport deletion during recovery causes panic
    scsi: blacklist RSOC for Microsoft iSCSI target devices
    scsi: fix random memory corruption with scsi-mq + T10 PI
    Revert "[SCSI] mpt3sas: Remove phys on topology change"
    Revert "[SCSI] mpt2sas: Remove phys on topology change."
    esas2r: Correct typos of "validate" in a comment
    fc: FCP_PTA_SIMPLE is 0
    ibmvfc: remove unused tag variable
    scsi: remove MSG_*_TAG defines
    scsi: remove scsi_set_tag_type
    scsi: remove scsi_get_tag_type
    scsi: never drop to untagged mode during queue ramp down
    scsi: remove ->change_queue_type method

    Linus Torvalds
     

04 Dec, 2014

1 commit

  • For SPI drivers use the message definitions from scsi.h, and for target
    drivers introduce a new TCM_*_TAG namespace.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Bart Van Assche
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com

    Christoph Hellwig
     

02 Dec, 2014

9 commits

  • This helper macro adds the default set of 30 device attributes for
    virtual devices from existing target_core_configfs.c code, and moves
    the definitions into a single macro to create the structs necessary
    for backend drivers.

    It allows them to populate their own external struct configfs_attribute
    for se_subsystem_api->tb_cits.tb_dev_attrib_cit.ct_attrs.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • Now that target_core_backend_configfs.h macros will be using these
    se_dev_set attribute functions externally to allow backend drivers
    to populate different attributes, go ahead and add EXPORT_SYMBOL()
    for the existing default set of 30 device attributes.

    Also update target_core_backend.h with proper function prototypes.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds a number of configfs e-attr macros following
    what existing target_core_configfs.c code does for internal
    target_backend_dev_attrib setup, and similar to how target
    fabric drivers allow for external config_item_type + cit->ct_attrs.
    assignment.

    This is useful for backend drivers like PSCSI who need to only
    expose a small subset of device attributes, while still retaining
    a default list of attributes for other backend drivers like
    IBLOCK, FILEIO, RAMDISK, and TCMU.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for dev_stat_cit as an external config_item_type
    using TB_CIT_SETUP() helper macro, and sets only ct_group_ops following
    existing code.

    It updates target_core_make_subdev() + target_core_setup_dev_attrib_cit() +
    struct target_backend_cits, and drops left-over target_core_dev_stat_cit
    from target_core_configfs.c code and update comments.

    This patch introduces no functional change from existing code.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for dev_alua_tg_pt_gps_cit as an external config_item_type
    using TB_CIT_SETUP() helper macro, and sets only ct_group_ops following
    existing code.

    It updates target_core_make_subdev() + target_core_setup_dev_attrib_cit() +
    struct target_backend_cits, and drops left-over target_core_dev_alua_tg_pt_gps_cit
    from target_core_configfs.c code and update comments.

    This patch introduces no functional change from existing code.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for dev_wwn_cit as an external config_item_type
    using TB_CIT_SETUP() helper macro, and sets both ct_item_ops + ct_attr
    following existing code.

    It updates target_core_make_subdev() + target_core_setup_dev_attrib_cit() +
    struct target_backend_cits, and drops left-over target_core_dev_wwn_cit
    from target_core_configfs.c code and update comments.

    This patch introduces no functional change from existing code.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for dev_pr_cit as an external config_item_type
    using TB_CIT_SETUP() helper macro, and sets both ct_item_ops + ct_attr
    following existing code.

    It updates target_core_make_subdev() + target_core_setup_dev_attrib_cit() +
    struct target_backend_cits, and drops left-over target_core_dev_pr_cit
    from target_core_configfs.c code and update comments.

    This patch introduces no functional change from existing code.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds support for dev_attrib_cit as an external config_item_type
    using TB_CIT_SETUP() helper macro, and sets both ct_item_ops + ct_attr
    following existing code.

    It updates target_core_make_subdev() + target_core_setup_dev_attrib_cit() +
    struct target_backend_cits, and drops left-over target_core_dev_attrib_cit
    from target_core_configfs.c code and update comments.

    This patch introduces no functional change from existing code.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds initial support for dev_cit as external config_item_type.

    This includes a new struct target_backend_cits to hold the external CITs
    within struct se_subsystem_api, and target_core_setup_sub_cits() to be
    used by backend drivers ahead of transport_subsystem_register().

    It adds a TB_CIT_SETUP() helper following target_core_fabric_configfs.c
    to perform the config_item_type assignments.

    Also, drop left-over target_core_dev_cit from target_core_configfs.c code
    and update comments.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

04 Oct, 2014

1 commit

  • This patch adds a force_pr_aptpl device attribute used to force SPC-3 PR
    Activate Persistence across Target Power Loss (APTPL) operation. This
    makes PR metadata write-out occur during state change regardless if new
    PERSISTENT_RESERVE_OUT CDBs have their APTPL feature bit set.

    This is useful during H/A failover in active/passive setups where all PR
    state is being re-created on a different node, driven by configfs backend
    device + export layout and pre-loaded $DEV/pr/res_aptpl_metadata.

    Cc: Mike Christie
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

02 Oct, 2014

1 commit

  • The target code has a rather generous helping of smp_mb__after_atomic()
    throughout the code base. Most atomic operations were followed by one
    and none were preceded by smp_mb__before_atomic(), nor accompanied by a
    comment explaining the need for a barrier.

    Instead of trying to prove for every case whether or not it is needed,
    this patch introduces atomic_inc_mb() and atomic_dec_mb(), which
    explicitly include the memory barriers before and after the atomic
    operation. For now they are defined in a target header, although they
    could be of general use.

    Most of the existing atomic/mb combinations were replaced by the new
    helpers. In a few cases the atomic was sandwiched in
    spin_lock/spin_unlock and I simply removed the barrier.

    I suspect that in most cases the correct conversion would have been to
    drop the barrier. I also suspect that a few cases exist where a) the
    barrier was necessary and b) a second barrier before the atomic would
    have been necessary and got added by this patch.

    Signed-off-by: Joern Engel
    Signed-off-by: Nicholas Bellinger

    Joern Engel
     

12 Jun, 2014

2 commits

  • When an initiator sends an allocation length bigger than what its
    command consumes, the target should only return the actual response data
    and set the residual length to the unused part of the allocation length.

    Add a helper function that command handlers (INQUIRY, READ CAPACITY,
    etc) can use to do this correctly, and use this code to get the correct
    residual for commands that don't use the full initiator allocation in the
    handlers for READ CAPACITY, READ CAPACITY(16), INQUIRY, MODE SENSE and
    REPORT LUNS.

    This addresses a handful of failures as reported by Christophe with
    the Windows Certification Kit:

    http://permalink.gmane.org/gmane.linux.scsi.target.devel/6515

    Signed-off-by: Roland Dreier
    Tested-by: Christophe Vu-Brugier
    Cc: stable@vger.kernel.org # 3.10+
    Signed-off-by: Nicholas Bellinger

    Roland Dreier
     
  • In case the transport is iser we should not include the
    iscsi target info in the sendtargets text response pdu.
    This causes sendtargets response to include the target
    info twice.

    Modify iscsit_build_sendtargets_response to filter
    transport types that don't match.

    Signed-off-by: Sagi Grimberg
    Reported-by: Slava Shwartsman
    Cc: stable@vger.kernel.org # 3.11+
    Signed-off-by: Nicholas Bellinger

    Sagi Grimberg
     

07 Apr, 2014

7 commits

  • Split up __sbc_dif_verify_read() so that VERIFY READ emulation can
    perform target-core specific READ_STRIP, seperate from the existing
    FILEIO/RAMDISK backend emulation code.

    Also add sbc_dif_read_strip() in order to determine number of sectors
    using cmd->prot_length, and skip the extra sbc_dif_copy_prot().

    Reviewed-by: Sagi Grimberg
    Cc: Martin K. Petersen
    Cc: Or Gerlitz
    Cc: Quinn Tran
    Cc: Giridhar Malavali
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch adds WRITE_INSERT emulation within target-core
    using TYPE1 / TYPE3 PI modes in sbc_dif_generate() code.

    This is useful in order for existing legacy fabrics that do not
    support protection offloads to interact with backend devices that
    currently have T10 PI enabled.

    v2 changes:
    - Rename to sbc_dif_generate() (Sagi)

    Cc: Martin K. Petersen
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Cc: Quinn Tran
    Cc: Giridhar Malavali
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • In order to support local WRITE_INSERT + READ_STRIP operations for
    non PI enabled fabrics, the fabric driver needs to be able signal
    what protection offload operations are supported.

    This is done at session initialization time so the modes can be
    signaled by individual se_wwn + se_portal_group endpoints, as well
    as optionally across different transports on the same endpoint.

    For iser-target, set TARGET_PROT_ALL if the underlying ib_device
    has already signaled PI offload support, and allow this to be
    exposed via a new iscsit_transport->iscsit_get_sup_prot_ops()
    callback.

    For loopback, set TARGET_PROT_ALL to signal SCSI initiator mode
    operation.

    For all other drivers, set TARGET_PROT_NORMAL to disable fabric
    level PI.

    Cc: Martin K. Petersen
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Cc: Quinn Tran
    Cc: Giridhar Malavali
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • Now that TASK_ABORTED status is not generated for all cases by
    TMR ABORT_TASK + LUN_RESET, a new TFO->abort_task() caller is
    necessary in order to give fabric drivers a chance to unmap
    hardware / software resources before the se_cmd descriptor is
    released via the normal TFO->release_cmd() codepath.

    This patch adds TFO->aborted_task() in core_tmr_abort_task()
    in place of the original transport_send_task_abort(), and
    also updates all fabric drivers to implement this caller.

    The fabric drivers that include changes to perform cleanup
    via ->aborted_task() are:

    - iscsi-target
    - iser-target
    - srpt
    - tcm_qla2xxx

    The fabric drivers that currently set ->aborted_task() to
    NOPs are:

    - loopback
    - tcm_fc
    - usb-gadget
    - sbp-target
    - vhost-scsi

    For the latter five, there appears to be no additional cleanup
    required before invoking TFO->release_cmd() to release the
    se_cmd descriptor.

    v2 changes:
    - Move ->aborted_task() call into transport_cmd_finish_abort (Alex)

    Cc: Alex Leung
    Cc: Mark Rustad
    Cc: Roland Dreier
    Cc: Vu Pham
    Cc: Chris Boot
    Cc: Sebastian Andrzej Siewior
    Cc: Michael S. Tsirkin
    Cc: Giridhar Malavali
    Cc: Saurav Kashyap
    Cc: Quinn Tran
    Cc: Sagi Grimberg
    Cc: Or Gerlitz
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch addresses three of long standing issues wrt to Task
    Aborted Status (TAS) handling.

    The first is the incorrect assumption in core_tmr_handle_tas_abort()
    that TASK_ABORTED status is sent for the task referenced by TMR
    ABORT_TASK, and sending TASK_ABORTED status for TMR LUN_RESET on
    the same nexus the LUN_RESET was received.

    The second is to ensure the lun reference count is dropped within
    transport_cmd_finish_abort() by calling transport_lun_remove_cmd()
    before invoking transport_cmd_check_stop_to_fabric().

    The last is to fix the delayed TAS handling to allow outstanding
    WRITEs to complete before sending the TASK_ABORTED status. This
    includes changing transport_check_aborted_status() to avoid
    processing when SCF_SEND_DELAYED_TAS has not be set, and updating
    transport_send_task_abort() to drop the SCF_SENT_DELAYED_TAS
    check.

    Signed-off-by: Alex Leung
    Cc: Alex Leung
    Signed-off-by: Nicholas Bellinger

    Alex Leung
     
  • This is not going to be supported soon - so drop it.

    Signed-off-by: Sagi Grimberg
    Signed-off-by: Nicholas Bellinger

    Sagi Grimberg
     
  • Some transports (iSCSI/iSER/SRP/FC) support hardware INSERT/STRIP
    capabilities while other transports like loopback/vhost-scsi need
    perform this is software.

    This patch allows fabrics using SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC
    to signal the early LUN scan handling case where PROTECT CDB bits
    are set, but no fabric buffer has been provided.

    For transports which use generic new command these buffers have yet
    to be allocated.

    Also this way, target may support protection information
    against legacy initiators (writes are inserted and reads
    are stripped).

    (Only set prot_pto for loopback during early special case - nab)

    Signed-off-by: Sagi Grimberg
    Signed-off-by: Nicholas Bellinger

    Sagi Grimberg
     

14 Mar, 2014

1 commit

  • SBC-3 mandates the protection checks that must be
    performed in the rdprotect/wrprotect field. Use them.
    According to backstore device pi_attributes and
    cdb rdprotect/wrprotect field.

    (Fix incorrect se_cmd->prot_type -> TARGET_PROT_NORMAL
    comparision in transport_generic_new_cmd - nab)
    (Fix missing break in sbc_set_prot_op_checks - DanC + Sagi)

    Signed-off-by: Sagi Grimberg
    Signed-off-by: Nicholas Bellinger

    Sagi Grimberg
     

05 Mar, 2014

1 commit

  • This patch addresses a couple of different hug shutdown issues
    related to wait_event() + isert_conn->state. First, it changes
    isert_conn->conn_wait + isert_conn->conn_wait_comp_err from
    waitqueues to completions, and sets ISER_CONN_TERMINATING from
    within isert_disconnect_work().

    Second, it splits isert_free_conn() into isert_wait_conn() that
    is called earlier in iscsit_close_connection() to ensure that
    all outstanding commands have completed before continuing.

    Finally, it breaks isert_cq_comp_err() into seperate TX / RX
    related code, and adds logic in isert_cq_rx_comp_err() to wait
    for outstanding commands to complete before setting ISER_CONN_DOWN
    and calling complete(&isert_conn->conn_wait_comp_err).

    Acked-by: Sagi Grimberg
    Cc: Or Gerlitz
    Cc: #3.10+
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

13 Feb, 2014

1 commit


01 Feb, 2014

1 commit

  • Pull SCSI target updates from Nicholas Bellinger:
    "The highlights this round include:

    - add support for SCSI Referrals (Hannes)
    - add support for T10 DIF into target core (nab + mkp)
    - add support for T10 DIF emulation in FILEIO + RAMDISK backends (Sagi + nab)
    - add support for T10 DIF -> bio_integrity passthrough in IBLOCK backend (nab)
    - prep changes to iser-target for >= v3.15 T10 DIF support (Sagi)
    - add support for qla2xxx N_Port ID Virtualization - NPIV (Saurav + Quinn)
    - allow percpu_ida_alloc() to receive task state bitmask (Kent)
    - fix >= v3.12 iscsi-target session reset hung task regression (nab)
    - fix >= v3.13 percpu_ref se_lun->lun_ref_active race (nab)
    - fix a long-standing network portal creation race (Andy)"

    * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (51 commits)
    target: Fix percpu_ref_put race in transport_lun_remove_cmd
    target/iscsi: Fix network portal creation race
    target: Report bad sector in sense data for DIF errors
    iscsi-target: Convert gfp_t parameter to task state bitmask
    iscsi-target: Fix connection reset hang with percpu_ida_alloc
    percpu_ida: Make percpu_ida_alloc + callers accept task state bitmask
    iscsi-target: Pre-allocate more tags to avoid ack starvation
    qla2xxx: Configure NPIV fc_vport via tcm_qla2xxx_npiv_make_lport
    qla2xxx: Enhancements to enable NPIV support for QLOGIC ISPs with TCM/LIO.
    qla2xxx: Fix scsi_host leak on qlt_lport_register callback failure
    IB/isert: pass scatterlist instead of cmd to fast_reg_mr routine
    IB/isert: Move fastreg descriptor creation to a function
    IB/isert: Avoid frwr notation, user fastreg
    IB/isert: seperate connection protection domains and dma MRs
    tcm_loop: Enable DIF/DIX modes in SCSI host LLD
    target/rd: Add DIF protection into rd_execute_rw
    target/rd: Add support for protection SGL setup + release
    target/rd: Refactor rd_build_device_space + rd_release_device_space
    target/file: Add DIF protection support to fd_execute_rw
    target/file: Add DIF protection init/format support
    ...

    Linus Torvalds
     

30 Jan, 2014

1 commit

  • This patch fixes a percpu_ref_put race for se_lun->lun_ref in
    transport_lun_remove_cmd() where ->lun_ref could end up being
    put more than once per command via different target completion
    and fabric release contexts.

    It adds a cmpxchg() for se_cmd->lun_ref_active to ensure that
    percpu_ref_put() is only ever called once per se_cmd.

    This bug was manifesting itself as a LUN shutdown regression
    bug in >= v3.13 code, where percpu_ref_kill() would end up
    hanging indefinately due to the incorrect percpu_ref count.

    (Change se_cmd->lun_ref_active from bool -> int to force at
    least a 4-byte cmpxchg with MIPS ll/sc ins. - Fengguang)

    Reported-by: Tommy Apel
    Cc: Tommy Apel
    Cc: #3.13+
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

25 Jan, 2014

2 commits


18 Jan, 2014

4 commits

  • This patch adds support to target_submit_cmd_map_sgls() for
    accepting 'sgl_prot' + 'sgl_prot_count' parameters for
    DIF protection information.

    Note the passed parameters are stored at se_cmd->t_prot_sg
    and se_cmd->t_prot_nents respectively.

    Also, update tcm_loop and vhost-scsi fabrics usage of
    target_submit_cmd_map_sgls() to take into account the
    new parameters.

    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
     
  • This patch adds support for DIF related CHECK_CONDITION ASC/ASCQ
    exception cases into transport_send_check_condition_and_sense().

    This includes:

    LOGICAL BLOCK GUARD CHECK FAILED
    LOGICAL BLOCK APPLICATION TAG CHECK FAILED
    LOGICAL BLOCK REFERENCE TAG CHECK FAILED

    that used by DIF TYPE1 and TYPE3 failure cases.

    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 DIF related definitions to target_core_base.h
    that includes enums for target_prot_op + target_prot_type +
    target_prot_version + target_guard_type + target_pi_error.

    Also included is struct se_dif_v1_tuple, along with changes
    to struct se_cmd, struct se_dev_attrib, and struct se_device.

    Also, add new se_subsystem_api->[init,format,free]_prot() callers
    used by target core code to setup backend specific protection
    information after the device has been configured.

    Enums taken from Sagi Grimberg's original patch.

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

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

    Nicholas Bellinger
     

10 Jan, 2014

2 commits

  • This patch converts the temporary buffer in spc_emulate_inquiry() to
    use dynamically allocated memory, instead of local stack memory.

    Also bump SE_INQUIRY_BUF up to 1024 bytes to be safe when handling
    multiple large SCSI name descriptors for EVPD=0x83.

    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • Add infrastructure for referrals.

    v2 changes:

    - Fix unsigned long long division in core_alua_state_lba_dependent on
    32-bit (Fengguang + Chen + Hannes)
    - Fix compile warning in core_alua_state_lba_dependent (nab)
    - Convert segment_* + sectors variables in core_alua_state_lba_dependent
    to u64 (Hannes)

    Signed-off-by: Hannes Reinecke
    Signed-off-by: Nicholas Bellinger

    Hannes Reinecke
     

19 Dec, 2013

1 commit

  • This patch allows FILEIO to update hw_max_sectors based on the current
    max_bytes_per_io. This is required because vfs_[writev,readv]() can accept
    a maximum of 2048 iovecs per call, so the enforced hw_max_sectors really
    needs to be calculated based on block_size.

    This addresses a >= v3.5 bug where block_size=512 was rejecting > 1M
    sized I/O requests, because FD_MAX_SECTORS was hardcoded to 2048 for
    the block_size=4096 case.

    (v2: Use max_bytes_per_io instead of ->update_hw_max_sectors)

    Reported-by: Henrik Goldman
    Cc: #3.5+
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

18 Dec, 2013

4 commits