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