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

2 commits


18 Jan, 2014

1 commit

  • This patch adds support for exposing DIF protection device
    attributes via configfs. This includes:

    pi_prot_type: Protection Type (0, 1, 3 currently support)
    pi_prot_format: Protection Format Operation (FILEIO only)

    Within se_dev_set_pi_prot_type() it also adds the se_subsystem_api
    device callbacks to setup per device protection information.

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

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

    Nicholas Bellinger
     

17 Dec, 2013

2 commits


08 Nov, 2013

1 commit

  • This patch adds percpu refcounting for se_lun access that allows the
    association of an se_lun + se_cmd in transport_lookup_cmd_lun() to
    occur without an extra list_head for tracking outstanding I/O during
    se_lun shutdown.

    This effectively changes se_lun shutdown logic to wait for outstanding
    I/O percpu references to complete in transport_lun_remove_cmd() using
    se_lun->lun_ref_comp, instead of explicitly draining the per se_lun
    command list and waiting for individual se_cmd descriptor processing
    to complete.

    Cc: Kent Overstreet
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

24 Oct, 2013

1 commit


11 Sep, 2013

1 commit

  • This patch adds the Third Party Copy (3PC) bit to signal support
    for EXTENDED_COPY within standard inquiry response data.

    Also add emulate_3pc device attribute in configfs (enabled by default)
    to allow the exposure of this bit to be disabled, if necessary.

    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Martin Petersen
    Cc: Chris Mason
    Cc: Roland Dreier
    Cc: Zach Brown
    Cc: James Bottomley
    Cc: Nicholas Bellinger
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

10 Sep, 2013

1 commit

  • This patch adds the MAXIMUM COMPARE AND WRITE LENGTH bit, currently
    hardcoded to a single logical block (NoLB=1) within the Block Limits
    VPD in spc_emulate_evpd_b0().

    Also add emulate_caw device attribute in configfs (enabled by default)
    to allow the exposure of this bit to be disabled, if necessary.

    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: Martin Petersen
    Cc: Chris Mason
    Cc: James Bottomley
    Cc: Nicholas Bellinger
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

04 May, 2013

1 commit


19 Feb, 2013

1 commit

  • This patch fixes a bug in core_tpg_check_initiator_node_acl() ->
    core_tpg_get_initiator_node_acl() where a dynamically created
    se_node_acl generated during session login would be skipped during
    subsequent lookup due to the '!acl->dynamic_node_acl' check, causing
    a new se_node_acl to be created with a duplicate ->initiatorname.

    This would occur when a fabric endpoint was configured with
    TFO->tpg_check_demo_mode()=1 + TPF->tpg_check_demo_mode_cache()=1
    preventing the release of an existing se_node_acl during se_session
    shutdown.

    Also, drop the unnecessary usage of core_tpg_get_initiator_node_acl()
    within core_dev_init_initiator_node_lun_acl() that originally
    required the extra '!acl->dynamic_node_acl' check, and just pass
    the configfs provided se_node_acl pointer instead.

    Cc:
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

14 Feb, 2013

1 commit


16 Nov, 2012

1 commit

  • This patch adds a new max_write_same_len device attribute for use with
    WRITE_SAME w/ UNMAP=0 backend emulation. This can be useful for
    lowering the default backend value (IBLOCK uses 0xFFFF).

    Also, update block limits VPD emulation code in spc_emulate_evpd_b0() to
    report MAXIMUM WRITE SAME LENGTH, and enforce max_write_same_len during
    sbc_parse() -> sbc_setup_write_same() CDB sanity checking for all emulated
    WRITE_SAME w/ UNMAP=0 cases.

    (Robert: Move max_write_same_len check in sbc_setup_write_same() to
    check both WRITE_SAME w/ UNMAP=1 and w/ UNMAP=0 cases)

    Cc: Christoph Hellwig
    Cc: Martin K. Petersen
    Cc: Robert Elliott
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

07 Nov, 2012

3 commits

  • Pass the sense reason as an explicit return value from the I/O submission
    path instead of storing it in struct se_cmd and using negative return
    values. This cleans up a lot of the code pathes, and with the sparse
    annotations for the new sense_reason_t type allows for much better
    error checking.

    (nab: Convert spc_emulate_modesense + spc_emulate_modeselect to use
    sense_reason_t with Roland's MODE SELECT changes)

    Signed-off-by: Christoph Hellwig
    Cc: Roland Dreier
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     
  • Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     
  • Simplify the code a lot by killing the superflous struct se_subsystem_dev.
    Instead se_device is allocated early on by the backend driver, which allocates
    it as part of its own per-device structure, borrowing the scheme that is for
    example used for inode allocation.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     

17 Jul, 2012

6 commits

  • Code was almost entirely divided based on value of bool param "enable".

    Split it into two functions.

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

    Andy Grover
     
  • Only used in a debugprint, and function signature is cleaner now.

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

    Andy Grover
     
  • Since "target: Drop se_device TCQ queue_depth usage from I/O path" we always
    submit all commands (or back then, tasks) from __transport_execute_tasks.

    That means the the execute list has lots its purpose, as we can simply
    submit the commands that are restarted in transport_complete_task_attr
    directly while we walk the list. In fact doing so also solves a race
    in the way it currently walks to delayed_cmd_list as well.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     
  • Move the existing code in target_core_cdb.c into the files for the command
    sets that the emulations implement.

    (roland + nab: Squash patch: Fix range calculation in WRITE SAME emulation
    when num blocks == 0s)

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     
  • Instead of trying to handle all SCSI command sets in one function
    (transport_generic_cmd_sequencer) call out to the backend driver to perform
    this functionality. For pSCSI a copy of the existing code is used, but for
    all virtual backends we can use a new parse_sbc_cdb helper is used to
    provide a simple SBC emulation.

    For now this setups means a fair amount of duplication between pSCSI and the
    SBC library, but patches later in this series will sort out that problem.

    (nab: Fix up build failure in target_core_pscsi.c)

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     
  • (nab: Add EXPORT_SYMBOL usage for spc_parse_cdb)

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig
     

07 May, 2012

2 commits


26 Feb, 2012

2 commits

  • se_dev_attrib.max_sectors currently has two independent meanings:

    - It is reported in the block limits VPD page as the maximum transfer
    length, ie the largest IO that the front-end (fabric) can handle.
    Also the target core doesn't enforce this maximum transfer length.

    - It is used to hold the size of the largest IO that the back-end can
    handle, so we know when to split SCSI commands into multiple tasks.

    Fix this by adding a new se_dev_attrib.fabric_max_sectors to hold the
    maximum transfer length, and checking incoming IOs against that limit.

    Signed-off-by: Roland Dreier
    Signed-off-by: Nicholas Bellinger

    Roland Dreier
     
  • This patch adds initial support for TMR_ABORT_TASK ops for se_cmd
    descriptors using se_sess->sess_cmd_list and se_cmd->cmd_kref counting.

    It will perform an explict abort for all outstanding se_cmd ops based
    upon tmr->ref_task_tag that have not been set CMD_T_COMPLETE.
    It will cancel se_cmd->work and wait for backing I/O to complete before
    attempting to send SAM_STAT_TASK_ABORTED and perform
    target_put_sess_cmd() to release the referenced descriptor.

    It also adds a CMD_T_ABORTED check into transport_complete_task() to
    catch the completion from backend I/O that has been aborted, and
    updates transport_wait_for_tasks() to allow CMD_T_ABORTED usage with
    core_tmr_abort_task() context.

    Reported-by: Roland Dreier
    Cc: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

18 Jan, 2012

1 commit

  • - core_tpg_pre_addlun()
    returns always ERR_PTR() or the pointer, never NULL. The additional
    check for NULL in core_dev_add_lun() is not required.

    - core_tpg_pre_dellun()
    returns always ERR_PTR() or the pointer, never NULL. The check for NULL
    in core_dev_del_lun() is wrong. The third argument (int *) is never
    used, remove it.

    - core_dev_add_lun()
    returns always NULL or the pointer, never ERR_PTR. The check for
    IS_ERR() is not required.

    (nab: Convert core_dev_add_lun() use err.h macros for failure
    handling to be consistent with the rest of target_core_fabric_configfs.c
    callers)

    Signed-off-by: Sebastian Andrzej Siewior
    Cc:
    Signed-off-by: Nicholas Bellinger

    Sebastian Andrzej Siewior
     

14 Dec, 2011

1 commit

  • Create a new headers, drivers/target/target_core_internal.h that is supposed
    to hold all target_core-internal prototypes. Move all non-exported includes
    from include/target to it, and merge the smaller prototype-only includes
    inside drivers/target into it as well. Mark functions that were found to
    not be called outside their implementation file static.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Nicholas Bellinger

    Christoph Hellwig