13 Jun, 2012

2 commits

  • The error paths in target_emulate_set_target_port_groups() are all
    essentially "rc = -EINVAL; goto out;" but the code at "out:" ignores
    rc and always returns success. This means that even if eg explicit
    ALUA is turned off, the initiator will always see a good SCSI status
    for SET TARGET PORT GROUPS.

    Fix this by returning rc as is intended. It appears this bug was
    added by the following patch:

    commit 05d1c7c0d0db4cc25548d9aadebb416888a82327
    Author: Andy Grover
    Date: Wed Jul 20 19:13:28 2011 +0000

    target: Make all control CDBs scatter-gather

    Signed-off-by: Roland Dreier
    Cc: Andy Grover
    Cc:
    Signed-off-by: Nicholas Bellinger

    Roland Dreier
     
  • This patch adds an optional target_core_fabric_ops->put_session() caller
    within the existing target_put_session() code path.

    This is required by tcm_qla2xxx code in order to invoke it's own fabric
    specific session shutdown handler using se_session->sess_kref.

    Signed-off-by: Joern Engel
    Cc: Roland Dreier
    Cc: Arun Easi
    Signed-off-by: Nicholas Bellinger

    Joern Engel
     

03 Jun, 2012

1 commit

  • Convert to use O_DSYNC for all cases at FILEIO backend creation time to
    avoid the extra syncing of pure timestamp updates with legacy O_SYNC during
    default operation as recommended by hch. Continue to do this independently of
    Write Cache Enable (WCE) bit, as WCE=0 is currently the default for all backend
    devices and enabled by user on per device basis via attrib/emulate_write_cache.

    This patch drops the now unnecessary fd_buffered_io= token usage that was
    originally signalling when to explictly disable O_SYNC at backend creation
    time for buffered I/O operation. This can end up being dangerous for a number
    of reasons during physical node failure, so go ahead and drop this option
    for now when O_DSYNC is used as the default.

    Also allow explict FUA WRITEs -> vfs_fsync_range() call to function in
    fd_execute_cmd() independently of WCE bit setting.

    Reported-by: Christoph Hellwig
    Cc: Linus Torvalds
    Cc:
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

31 May, 2012

1 commit


24 May, 2012

1 commit

  • Pull sbp-2 (firewire) target mode support from Nicholas Bellinger:
    "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.

    Also included are the two drivers/firewire/ patches required by
    sbp-target to access fw_request fabric speed needed for mgt_agent
    TCODE_WRITE_BLOCK_REQUEST ops, and exporting fw_card kref logic used
    when creating/destroying active session references to individual
    endpoints.

    A credit goes to Chris in being able to get this code up and running
    so quickly w/o any target core changes, and special thanks goes out to
    Stefan Richter + Clemens Ladisch + Andy Grover for their help in
    getting this driver ready for mainline. Also, one of Chris's goals
    was to be able to connect sbp-target to a PowerPC based MacOS-X based
    client, that he accomplished along the way in this obligatory
    screenshot:

    http://linux-iscsi.org/wiki/File:Linux-fireware-target-bootc-macosx.png

    Great work Chris + linux-1394 team !!"

    Acked-by: Stefan Richter

    * 'sbp-target-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
    sbp-target: Initial merge of firewire/ieee-1394 target mode support
    firewire: Move fw_card kref functions into linux/firewire.h
    firewire: Add function to get speed from opaque struct fw_request

    Linus Torvalds
     

22 May, 2012

1 commit

  • Pull scsi-target changes from Nicholas Bellinger:
    "There has been lots of work in existing code in a number of areas this
    past cycle. The major highlights have been:

    * Removal of transport_do_task_sg_chain() from core + fabrics
    (Roland)
    * target-core: Removal of se_task abstraction from target-core and
    enforce hw_max_sectors for pSCSI backends (hch)
    * Re-factoring of iscsi-target tx immediate/response queues (agrover)
    * Conversion of iscsi-target back to using target core memory
    allocation logic (agrover)

    We've had one last minute iscsi-target patch go into for-next to
    address a nasty regression bug related to the target core allocation
    logic conversion from agrover that is not included in friday's
    linux-next build, but has been included in this series.

    On the new fabric module code front for-3.5, here is a brief status
    update for the three currently in flight this round:

    * usb-gadget target driver:

    Sebastian Siewior's driver for supporting usb-gadget target mode
    operation. This will be going out as a separate PULL request from
    target-pending/usb-target-merge with subsystem maintainer ACKs. There
    is one minor target-core patch in this series required to function.

    * sbp ieee-1394/firewire target driver:

    Chris Boot's driver for supportting the Serial Block Protocol (SBP)
    across IEEE-1394 Firewire hardware. This will be going out as a
    separate PULL request from target-pending/sbp-target-merge with two
    additional drivers/firewire/ patches w/ subsystem maintainer ACKs.

    * qla2xxx LLD target mode infrastructure changes + tcm_qla2xxx:

    The Qlogic >= 24xx series HW target mode LLD infrastructure patch-set
    and tcm_qla2xxx fabric driver. Support for FC target mode using
    qla2xxx LLD code has been officially submitted by Qlogic to James
    below, and is currently outstanding but not yet merged into
    scsi.git/for-next..

    [PATCH 00/22] qla2xxx: Updates for scsi "misc" branch
    http://www.spinics.net/lists/linux-scsi/msg59350.html

    Note there are *zero* direct dependencies upon this for-next series
    for the qla2xxx LLD target + tcm_qla2xxx patches submitted above, and
    over the last days the target mode team has been tracking down an
    tcm_qla2xxx specific active I/O shutdown bug that appears to now be
    almost squashed for 3.5-rc-fixes."

    * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (47 commits)
    iscsi-target: Fix iov_count calculation bug in iscsit_allocate_iovecs
    iscsi-target: remove dead code in iscsi_check_valuelist_for_support
    target: Handle ATA_16 passthrough for pSCSI backend devices
    target: Add MI_REPORT_TARGET_PGS ext. header + implict_trans_secs attribute
    target: Fix MAINTENANCE_IN service action CDB checks to use lower 5 bits
    target: add support for the WRITE_VERIFY command
    target: make target_put_session void
    target: cleanup transport_execute_tasks()
    target: Remove max_sectors device attribute for modern se_task less code
    target: lock => unlock typo in transport_lun_wait_for_tasks
    target: Enforce hw_max_sectors for SCF_SCSI_DATA_SG_IO_CDB
    target: remove the t_se_count field in struct se_cmd
    target: remove the t_task_cdbs_ex_left field in struct se_cmd
    target: remove the t_task_cdbs_left field in struct se_cmd
    target: remove struct se_task
    target: move the state and execute lists to the command
    target: simplify command to task linkage
    target: always allocate a single task
    target: replace ->execute_task with ->execute_cmd
    target: remove the task_sectors field in struct se_task
    ...

    Linus Torvalds
     

21 May, 2012

1 commit

  • This patch fixes a bug in iscsit_allocate_iovecs() where iov_count was
    incorrectly calculated using min(1UL, data_length / PAGE_SIZE) instead of
    max(1UL, data_length / PAGE_SIZE), that ends up triggering an OOPs for
    large block I/O when the SGL iovec mapping exceeds the bogus iov_count
    allocation size.

    This is a regression introduced during the iscsi-target conversion back
    to using core memory allocation here:

    commit bfb79eac2026b411df9e253a9c350039b4b04bb7
    Author: Andy Grover
    Date: Tue Apr 3 15:51:29 2012 -0700

    target/iscsi: Go back to core allocating data buffer for cmd

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

    Nicholas Bellinger
     

18 May, 2012

2 commits

  • Neither "acceptor_values" nor "proposer_values" can be NULL here when
    scanning the value lists for incoming iSCSI login parameters such as
    HeaderDigest=CRC32C,None.

    Smatch complains because we are not allowed to pass NULL pointers to
    strchr(). Also I removed a second later check for "!acceptor_values"
    because it gets checked on the next line in the do while condition.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Nicholas Bellinger

    Dan Carpenter
     
  • This patch fixes a bug in the handling of FILEIO w/ underlying block_device
    resize operations where the original fd_dev->fd_dev_size was incorrectly being
    used in fd_get_blocks() for READ_CAPACITY response payloads.

    This patch avoids using fd_dev->fd_dev_size for FILEIO devices with
    an underlying block_device, and instead changes fd_get_blocks() to
    get the sector count directly from i_size_read() as recommended by hch.

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

    Nicholas Bellinger
     

17 May, 2012

3 commits

  • The cdrecord uses ATA_PASS_THROUGH_16 command while burning CDs
    with a SATA CD-ROM. This patch adds support to it so that PSCSI
    CD-ROM passthrough works with the cdrecord.

    (nab: Add !passthrough check to prevent non pSCSI backends from ATA_16)

    Signed-off-by: Cong Meng
    Signed-off-by: Nicholas Bellinger

    mengcong
     
  • This patch adds support for ALUA MI_REPORT_TARGET_PGS extended header
    format defined within SPC-4. It changes target core ALUA emulation logic
    within target_emulate_report_target_port_groups() to support both the
    extended and original length only header formats.

    It includes adding a new 'implict_trans_secs' attribute for each ALUA
    target port group to control the value returned to the application client
    for an recommended implict translation timeout in seconds. By default
    this value is currently set to zero, and limited up to 255 by virtue of
    using a single byte in the extended header format.

    This value is used by target_emulate_report_target_port_groups() within
    the extended header logic to set IMPLICIT TRANSITION TIME as defined by
    spc4r30.

    Cc: Hannes Reinecke
    Cc: Rob Evers
    Cc: Christoph Hellwig
    Cc: Roland Dreier
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     
  • This patch fixes the MAINTENANCE_IN service action type checks to only
    look at the proper lower 5 bits of cdb byte 1. This addresses the case
    where MI_REPORT_TARGET_PGS w/ extended header using the upper three bits of
    cdb byte 1 was not processed correctly in transport_generic_cmd_sequencer,
    as well as the three cases for standby, unavailable, and transition ALUA
    primary access state checks.

    Also add MAINTENANCE_IN to the excluded list in transport_generic_prepare_cdb()
    to prevent the PARAMETER DATA FORMAT bits from being cleared.

    Cc: Hannes Reinecke
    Cc: Rob Evers
    Cc: Christoph Hellwig
    Cc: Roland Dreier
    Signed-off-by: Nicholas Bellinger

    Nicholas Bellinger
     

16 May, 2012

1 commit


15 May, 2012

1 commit

  • This patch addresses a bug in a special case for target core SPC-2 RELEASE
    logic where the same physical client (eg: iSCSI InitiatorName) with
    differing iSCSI session identifiers (ISID) is allowed to incorrectly release
    the same client's SPC-2 reservation from the non reservation holding path.

    Note this bug is specific to iscsi-target w/ SPC-2 reservations, and
    with the default enforce_pr_isids=1 device attr setting in target-core
    controls if a InitiatorName + different ISID reservations are handled
    the same as a single iSCSI client entity.

    Signed-off-by: Bernhard Kohl
    Cc:
    Signed-off-by: Nicholas Bellinger

    Bernhard Kohl
     

12 May, 2012

3 commits


10 May, 2012

4 commits

  • 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
     
  • This patch removes the original usage of dev_attr->max_sectors in favor of
    dev_attr->hw_max_sectors that is now being enforced by target core from
    within transport_generic_cmd_sequencer() for SCF_SCSI_DATA_SG_IO_CDB ops.

    After the recent se_task removal patches from hch, this value for IBLOCK
    backends being set via configfs by userspace from an saved max_sectors
    value that is turning out to be problematic, so it makes sense to go ahead
    and remove this now legacy attribute all-together.

    This patch also continues to make se_dev_set_default_attribs() do
    (sectors / block_size) alignment for what actually get used by
    target_core_mod to be safe here, following the same alignment currently
    used by fabric_max_sectors.

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

    Nicholas Bellinger
     
  • target_stop_cmd() returns with the lock held and IRQs disabled. The
    intent was to unlock here. This bug was originally added with:

    commit cf572a9627c9ae86082216de109780c1d2e2ee28
    Author: Christoph Hellwig
    Date: Tue Apr 24 00:25:05 2012 -0400

    target: move the state and execute lists to the command

    Signed-off-by: Dan Carpenter
    Signed-off-by: Nicholas Bellinger

    Dan Carpenter
     
  • Instead of depending upon a max_sectors value that may be set via
    configfs based upon original HW queue limitations, go ahead and convert to using
    the hw_max_sectors reported by the backend device in order to determine when
    to reject an I/O's who's sector count exceeds what is supported by the backend
    with a single se_cmd descriptor.

    It addresses a potential case where se_dev_attrib.max_sectors for IBLOCK
    backends has already been set via queue_max_sectors() to something small
    like max_sectors=32 (LVM, DRBD may do this), resulting typically sized
    SCF_SCSI_DATA_SG_IO_CDB to be incorrectly rejected with invalid_cdb_field
    in transport_generic_cmd_sequencer().

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

    Nicholas Bellinger
     

07 May, 2012

15 commits


15 Apr, 2012

4 commits