09 Jun, 2022

3 commits

  • [ Upstream commit 179d8609d8424529e95021df939ed7b0b82b37f1 ]

    For block devices, the SCSI target drivers implements UNMAP as calls to
    blkdev_issue_discard, which does not guarantee zeroing just because
    Write Zeroes is supported.

    Note that this does not affect the file backed path which uses
    fallocate to punch holes.

    Fixes: 2237498f0b5c ("target/iblock: Convert WRITE_SAME to blkdev_issue_zeroout")
    Signed-off-by: Christoph Hellwig
    Reviewed-by: Martin K. Petersen
    Reviewed-by: Chaitanya Kulkarni
    Link: https://lore.kernel.org/r/20220415045258.199825-2-hch@lst.de
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin

    Christoph Hellwig
     
  • [ Upstream commit 325d5c5fb216674296f3902a8902b942da3adc5b ]

    In tcmu_blocks_release(), lock_page() is called to prevent a race causing
    possible data corruption. Since lock_page() might sleep, calling it while
    holding XArray lock is a bug.

    To fix this, replace the xas_for_each() call with xa_for_each_range().
    Since the latter does its own handling of XArray locking, the xas_lock()
    and xas_unlock() calls around the original loop are no longer necessary.

    The switch to xa_for_each_range() slows down the loop slightly. This is
    acceptable since tcmu_blocks_release() is not relevant for performance.

    Link: https://lore.kernel.org/r/20220517192913.21405-1-bostroesser@gmail.com
    Fixes: bb9b9eb0ae2e ("scsi: target: tcmu: Fix possible data corruption")
    Reported-by: Dan Carpenter
    Signed-off-by: Bodo Stroesser
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Bodo Stroesser
     
  • [ Upstream commit bb9b9eb0ae2e9d3f6036f0ad907c3a83dcd43485 ]

    When tcmu_vma_fault() gets a page successfully, before the current context
    completes page fault procedure, find_free_blocks() may run and call
    unmap_mapping_range() to unmap the page. Assume that when
    find_free_blocks() initially completes and the previous page fault
    procedure starts to run again and completes, then one truncated page has
    been mapped to userspace. But note that tcmu_vma_fault() has gotten a
    refcount for the page so any other subsystem won't be able to use the page
    unless the userspace address is unmapped later.

    If another command subsequently runs and needs to extend dbi_thresh it may
    reuse the corresponding slot for the previous page in data_bitmap. Then
    though we'll allocate new page for this slot in data_area, no page fault
    will happen because we have a valid map and the real request's data will be
    lost.

    Filesystem implementations will also run into this issue but they usually
    lock the page when vm_operations_struct->fault gets a page and unlock the
    page after finish_fault() completes. For truncate filesystems lock pages in
    truncate_inode_pages() to protect against racing wrt. page faults.

    To fix this possible data corruption scenario we can apply a method similar
    to the filesystems. For pages that are to be freed, tcmu_blocks_release()
    locks and unlocks. Make tcmu_vma_fault() also lock found page under
    cmdr_lock. At the same time, since tcmu_vma_fault() gets an extra page
    refcount, tcmu_blocks_release() won't free pages if pages are in page fault
    procedure, which means it is safe to call tcmu_blocks_release() before
    unmap_mapping_range().

    With these changes tcmu_blocks_release() will wait for all page faults to
    be completed before calling unmap_mapping_range(). And later, if
    unmap_mapping_range() is called, it will ensure stale mappings are removed.

    Link: https://lore.kernel.org/r/20220421023735.9018-1-xiaoguang.wang@linux.alibaba.com
    Reviewed-by: Bodo Stroesser
    Signed-off-by: Xiaoguang Wang
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Xiaoguang Wang
     

20 Apr, 2022

1 commit

  • [ Upstream commit a6968f7a367f128d120447360734344d5a3d5336 ]

    tcmu_try_get_data_page() looks up pages under cmdr_lock, but it does not
    take refcount properly and just returns page pointer. When
    tcmu_try_get_data_page() returns, the returned page may have been freed by
    tcmu_blocks_release().

    We need to get_page() under cmdr_lock to avoid concurrent
    tcmu_blocks_release().

    Link: https://lore.kernel.org/r/20220311132206.24515-1-xiaoguang.wang@linux.alibaba.com
    Reviewed-by: Bodo Stroesser
    Signed-off-by: Xiaoguang Wang
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Xiaoguang Wang
     

16 Feb, 2022

1 commit

  • [ Upstream commit a861790afaa8b6369eee8a88c5d5d73f5799c0c6 ]

    iscsit_tpg_check_network_portal() has nested for_each loops and is supposed
    to return true when a match is found. However, the tpg loop will still
    continue after existing the tpg_np loop. If this tpg_np is not the last the
    match value will be changed.

    Break the outer loop after finding a match and make sure the np under each
    tpg is unique.

    Link: https://lore.kernel.org/r/20220111054742.19582-1-mingzhe.zou@easystack.cn
    Signed-off-by: ZouMingzhe
    Reviewed-by: Mike Christie
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    ZouMingzhe
     

25 Nov, 2021

2 commits

  • [ Upstream commit 1283c0d1a32bb924324481586b5d6e8e76f676ba ]

    We can't free the tg_pt_gp in core_alua_set_tg_pt_gp_id() because it's
    still accessed via configfs. Its release must go through the normal
    configfs/refcount process.

    The max alua_tg_pt_gps_count check should probably have been done in
    core_alua_allocate_tg_pt_gp(), but with the current code userspace could
    have created 0x0000ffff + 1 groups, but only set the id for 0x0000ffff.
    Then it could have deleted a group with an ID set, and then set the ID for
    that extra group and it would work ok.

    It's unlikely, but just in case this patch continues to allow that type of
    behavior, and just fixes the kfree() while in use bug.

    Link: https://lore.kernel.org/r/20210930020422.92578-4-michael.christie@oracle.com
    Signed-off-by: Mike Christie
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Mike Christie
     
  • [ Upstream commit ed1227e080990ffec5bf39006ec8a57358e6689a ]

    This patch fixes the following bugs:

    1. If there are multiple ordered cmds queued and multiple simple cmds
    completing, target_restart_delayed_cmds() could be called on different
    CPUs and each instance could start a ordered cmd. They could then run in
    different orders than they were queued.

    2. target_restart_delayed_cmds() and target_handle_task_attr() can race
    where:

    1. target_handle_task_attr() has passed the simple_cmds == 0 check.

    2. transport_complete_task_attr() then decrements simple_cmds to 0.

    3. transport_complete_task_attr() runs target_restart_delayed_cmds() and
    it does not see any cmds on the delayed_cmd_list.

    4. target_handle_task_attr() adds the cmd to the delayed_cmd_list.

    The cmd will then end up timing out.

    3. If we are sent > 1 ordered cmds and simple_cmds == 0, we can execute
    them out of order, because target_handle_task_attr() will hit that
    simple_cmds check first and return false for all ordered cmds sent.

    4. We run target_restart_delayed_cmds() after every cmd completion, so if
    there is more than 1 simple cmd running, we start executing ordered cmds
    after that first cmd instead of waiting for all of them to complete.

    5. Ordered cmds are not supposed to start until HEAD OF QUEUE and all older
    cmds have completed, and not just simple.

    6. It's not a bug but it doesn't make sense to take the delayed_cmd_lock
    for every cmd completion when ordered cmds are almost never used. Just
    replacing that lock with an atomic increases IOPs by up to 10% when
    completions are spread over multiple CPUs and there are multiple
    sessions/ mqs/thread accessing the same device.

    This patch moves the queued delayed handling to a per device work to
    serialze the cmd executions for each device and adds a new counter to track
    HEAD_OF_QUEUE and SIMPLE cmds. We can then check the new counter to
    determine when to run the work on the completion path.

    Link: https://lore.kernel.org/r/20210930020422.92578-3-michael.christie@oracle.com
    Signed-off-by: Mike Christie
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Mike Christie
     

19 Nov, 2021

1 commit

  • [ Upstream commit 12b6fcd0ea7f3cb7c3b34668fc678779924123ae ]

    Currently TMF commands are removed from de_device.dev_tmf_list at the very
    end of se_cmd lifecycle. However, se_lun unlinks from se_cmd upon a command
    status (response) being queued in transport layer. This means that LUN and
    backend device can be deleted in the meantime and a panic will occur:

    target_tmr_work()
    cmd->se_tfo->queue_tm_rsp(cmd); // send abort_rsp to a wire
    transport_lun_remove_cmd(cmd) // unlink se_cmd from se_lun
    - // - // - // -
    <<<<free_mcmd()
    transport_generic_free_cmd()
    target_put_sess_cmd()
    core_tmr_release_req() {
    if (dev) { // backend device, can not be null
    spin_lock_irqsave(&dev->se_tmr_lock, flags); //<<
    Reviewed-by: Mike Christie
    Signed-off-by: Dmitry Bogdanov
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin

    Dmitry Bogdanov
     

22 Sep, 2021

1 commit


14 Sep, 2021

1 commit

  • Commit 356ba2a8bc8d ("scsi: target: tcmu: Make pgr_support and alua_support
    attributes writable") introduced support for changeable alua_support and
    pgr_support target attributes. These can only be changed if the backstore
    is user-backed, otherwise the kernel returns -EINVAL.

    This triggers a warning in the targetcli/rtslib code when performing a
    target restore that includes non-userbacked backstores:

    # targetctl restore
    Storage Object block/storage1: Cannot set attribute alua_support:
    [Errno 22] Invalid argument, skipped
    Storage Object block/storage1: Cannot set attribute pgr_support:
    [Errno 22] Invalid argument, skipped

    Fix this warning by returning an error code only if we are really going to
    flip the PGR/ALUA bit in the transport_flags field, otherwise we will do
    nothing and return success.

    Return ENOSYS instead of EINVAL if the pgr/alua attributes can not be
    changed, this way it will be possible for userspace to understand if the
    operation failed because an invalid value has been passed to strtobool() or
    because the attributes are fixed.

    Fixes: 356ba2a8bc8d ("scsi: target: tcmu: Make pgr_support and alua_support attributes writable")
    Link: https://lore.kernel.org/r/20210906151809.52811-1-mlombard@redhat.com
    Reviewed-by: Bodo Stroesser
    Signed-off-by: Maurizio Lombardi
    Signed-off-by: Martin K. Petersen

    Maurizio Lombardi
     

03 Sep, 2021

1 commit

  • Pull SCSI updates from James Bottomley:
    "This series consists of the usual driver updates (ufs, qla2xxx,
    target, smartpqi, lpfc, mpt3sas).

    The core change causing the most churn was replacing the command
    request field request with a macro, allowing us to offset map to it
    and remove the redundant field; the same was also done for the tag
    field.

    The most impactful change is the final removal of scsi_ioctl, which
    has been deprecated for over a decade"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (293 commits)
    scsi: ufs: Fix ufshcd_request_sense_async() for Samsung KLUFG8RHDA-B2D1
    scsi: ufs: ufs-exynos: Fix static checker warning
    scsi: mpt3sas: Use the proper SCSI midlayer interfaces for PI
    scsi: lpfc: Use the proper SCSI midlayer interfaces for PI
    scsi: lpfc: Copyright updates for 14.0.0.1 patches
    scsi: lpfc: Update lpfc version to 14.0.0.1
    scsi: lpfc: Add bsg support for retrieving adapter cmf data
    scsi: lpfc: Add cmf_info sysfs entry
    scsi: lpfc: Add debugfs support for cm framework buffers
    scsi: lpfc: Add support for maintaining the cm statistics buffer
    scsi: lpfc: Add rx monitoring statistics
    scsi: lpfc: Add support for the CM framework
    scsi: lpfc: Add cmfsync WQE support
    scsi: lpfc: Add support for cm enablement buffer
    scsi: lpfc: Add cm statistics buffer support
    scsi: lpfc: Add EDC ELS support
    scsi: lpfc: Expand FPIN and RDF receive logging
    scsi: lpfc: Add MIB feature enablement support
    scsi: lpfc: Add SET_HOST_DATA mbox cmd to pass date/time info to firmware
    scsi: fc: Add EDC ELS definition
    ...

    Linus Torvalds
     

18 Aug, 2021

3 commits

  • TCM fails to pass the following tests in libiscsi:

    SCSI.ExtendedCopy.DescrType
    SCSI.ExtendedCopy.DescrLimits
    SCSI.ExtendedCopy.ParamHdr
    SCSI.ExtendedCopy.ValidSegDescr
    SCSI.ExtendedCopy.ValidTgtDescr

    The xcopy code always returns the same NOT READY sense key for all detected
    errors. Change the sense key for invalid requests to ILLEGAL REQUEST, and
    for aborted transfers to COPY ABORTED.

    Link: https://lore.kernel.org/r/20210803145410.80147-3-s.samoylenko@yadro.com
    Fixes: d877d7275be3 ("target: Fix a deadlock between the XCOPY code and iSCSI session shutdown")
    Reviewed-by: David Disseldorp
    Reviewed-by: Roman Bolshakov
    Reviewed-by: Konstantin Shelekhin
    Signed-off-by: Sergey Samoylenko
    Signed-off-by: Martin K. Petersen

    Sergey Samoylenko
     
  • Currently, backend drivers can fail I/O with SAM_STAT_CHECK_CONDITION which
    gets us TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE.

    Add a new helper that allows backend drivers to fail with specific sense
    codes.

    This is based on a patch from Mike Christie .

    Cc: Mike Christie
    Link: https://lore.kernel.org/r/20210803145410.80147-2-s.samoylenko@yadro.com
    Reviewed-by: David Disseldorp
    Signed-off-by: Sergey Samoylenko
    Signed-off-by: Martin K. Petersen

    Sergey Samoylenko
     
  • The return value of transport_kmap_data_sg() is assigned to the variable
    buf:

    buf = transport_kmap_data_sg(cmd);

    And then it is checked:

    if (!buf) {

    This indicates that buf can be NULL. However, it is dereferenced in the
    following statements:

    if (!(buf[3] & 0x80))
    buf[3] |= 0x80;
    if (!(buf[2] & 0x80))
    buf[2] |= 0x80;

    To fix these possible null-pointer dereferences, dereference buf and call
    transport_kunmap_data_sg() only when buf is not NULL.

    Link: https://lore.kernel.org/r/20210810040414.248167-1-islituo@gmail.com
    Reported-by: TOTE Robot
    Reviewed-by: Bodo Stroesser
    Signed-off-by: Tuo Li
    Signed-off-by: Martin K. Petersen

    Tuo Li
     

12 Aug, 2021

2 commits


03 Aug, 2021

4 commits

  • These members are only used for ALUA sense detail propagation, which can
    just as easily be done via sense_reason_t.

    Link: https://lore.kernel.org/r/20210728115353.2396-4-ddiss@suse.de
    Reviewed-by: Mike Christie
    Signed-off-by: David Disseldorp
    Signed-off-by: Martin K. Petersen

    David Disseldorp
     
  • The se_cmd scsi_asc and scsi_ascq members are only used for tracking ALUA
    SCSI sense detail between target_core_alua and translate_sense_reason(), so
    they're effectively always zero here.

    Link: https://lore.kernel.org/r/20210728115353.2396-3-ddiss@suse.de
    Cc: Chris Boot
    Reviewed-by: Mike Christie
    Signed-off-by: David Disseldorp
    Signed-off-by: Martin K. Petersen

    David Disseldorp
     
  • core_alua_state_lba_dependent() currently uses lun->lun_tg_pt_gp without
    holding the lun_tg_pt_gp_lock. The lock is taken in the caller, so obtain
    the needed tg_pt_gp_id there instead.

    Link: https://lore.kernel.org/r/20210728115353.2396-2-ddiss@suse.de
    Cc: Hannes Reinecke
    Reviewed-by: Mike Christie
    Signed-off-by: David Disseldorp
    Signed-off-by: Martin K. Petersen

    David Disseldorp
     
  • When running command pipelining for WRITE direction commands (e.g. tape
    device write), userspace sends cmd completion to cmd ring before processing
    write data. In that case userspace has to copy data before sending
    completion, because cmd completion also implicitly releases the data buffer
    in data area.

    The new feature KEEP_BUF allows userspace to optionally keep the buffer
    after completion by setting new bit TCMU_UFLAG_KEEP_BUF in
    tcmu_cmd_entry_hdr->uflags. In that case buffer has to be released
    explicitly by writing the cmd_id to new action item free_kept_buf.

    All kept buffers are released during reset_ring and if userspace closes uio
    device (tcmu_release).

    Link: https://lore.kernel.org/r/20210713175021.20103-1-bostroesser@gmail.com
    Reviewed-by: Mike Christie
    Signed-off-by: Bodo Stroesser
    Signed-off-by: Martin K. Petersen

    Bodo Stroesser
     

29 Jul, 2021

1 commit

  • CONFIG_BLK_SCSI_REQUEST is rather misnamed as it enables building a small
    amount of code shared by the SCSI initiator, target, and consumers of the
    scsi_request passthrough API. Rename it and also allow building it as a
    module.

    [mkp: add module license]

    Link: https://lore.kernel.org/r/20210724072033.1284840-20-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Martin K. Petersen

    Christoph Hellwig
     

27 Jul, 2021

2 commits


21 Jul, 2021

2 commits

  • The driver core ignores the return value of this callback because there
    is only little it can do when a device disappears.

    This is the final bit of a long lasting cleanup quest where several
    buses were converted to also return void from their remove callback.
    Additionally some resource leaks were fixed that were caused by drivers
    returning an error code in the expectation that the driver won't go
    away.

    With struct bus_type::remove returning void it's prevented that newly
    implemented buses return an ignored error code and so don't anticipate
    wrong expectations for driver authors.

    Reviewed-by: Tom Rix (For fpga)
    Reviewed-by: Mathieu Poirier
    Reviewed-by: Cornelia Huck (For drivers/s390 and drivers/vfio)
    Acked-by: Russell King (Oracle) (For ARM, Amba and related parts)
    Acked-by: Mark Brown
    Acked-by: Chen-Yu Tsai (for sunxi-rsb)
    Acked-by: Pali Rohár
    Acked-by: Mauro Carvalho Chehab (for media)
    Acked-by: Hans de Goede (For drivers/platform)
    Acked-by: Alexandre Belloni
    Acked-By: Vinod Koul
    Acked-by: Juergen Gross (For xen)
    Acked-by: Lee Jones (For mfd)
    Acked-by: Johannes Thumshirn (For mcb)
    Acked-by: Johan Hovold
    Acked-by: Srinivas Kandagatla (For slimbus)
    Acked-by: Kirti Wankhede (For vfio)
    Acked-by: Maximilian Luz
    Acked-by: Heikki Krogerus (For ulpi and typec)
    Acked-by: Samuel Iglesias Gonsálvez (For ipack)
    Acked-by: Geoff Levand (For ps3)
    Acked-by: Yehezkel Bernat (For thunderbolt)
    Acked-by: Alexander Shishkin (For intel_th)
    Acked-by: Dominik Brodowski (For pcmcia)
    Acked-by: Rafael J. Wysocki (For ACPI)
    Acked-by: Bjorn Andersson (rpmsg and apr)
    Acked-by: Srinivas Pandruvada (For intel-ish-hid)
    Acked-by: Dan Williams (For CXL, DAX, and NVDIMM)
    Acked-by: William Breathitt Gray (For isa)
    Acked-by: Stefan Richter (For firewire)
    Acked-by: Benjamin Tissoires (For hid)
    Acked-by: Thorsten Scherer (For siox)
    Acked-by: Sven Van Asbroeck (For anybuss)
    Acked-by: Ulf Hansson (For MMC)
    Acked-by: Wolfram Sang # for I2C
    Acked-by: Sudeep Holla
    Acked-by: Geert Uytterhoeven
    Acked-by: Dmitry Torokhov
    Acked-by: Finn Thain
    Signed-off-by: Uwe Kleine-König
    Link: https://lore.kernel.org/r/20210713193522.1770306-6-u.kleine-koenig@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Uwe Kleine-König
     
  • CPU affinity control added with commit 39ae3edda325 ("scsi: target: core:
    Make completion affinity configurable") makes target_complete_cmd() queue
    work on a CPU based on se_tpg->se_tpg_wwn->cmd_compl_affinity state.

    LIO's EXTENDED COPY worker is a special case in that read/write cmds are
    dispatched using the global xcopy_pt_tpg, which carries a NULL se_tpg_wwn
    pointer following initialization in target_xcopy_setup_pt().

    The NULL xcopy_pt_tpg->se_tpg_wwn pointer is dereferenced on completion of
    any EXTENDED COPY initiated read/write cmds. E.g using the libiscsi
    SCSI.ExtendedCopy.Simple test:

    BUG: kernel NULL pointer dereference, address: 00000000000001a8
    RIP: 0010:target_complete_cmd+0x9d/0x130 [target_core_mod]
    Call Trace:
    fd_execute_rw+0x148/0x42a [target_core_file]
    ? __dynamic_pr_debug+0xa7/0xe0
    ? target_check_reservation+0x5b/0x940 [target_core_mod]
    __target_execute_cmd+0x1e/0x90 [target_core_mod]
    transport_generic_new_cmd+0x17c/0x330 [target_core_mod]
    target_xcopy_issue_pt_cmd+0x9/0x60 [target_core_mod]
    target_xcopy_read_source.isra.7+0x10b/0x1b0 [target_core_mod]
    ? target_check_fua+0x40/0x40 [target_core_mod]
    ? transport_complete_task_attr+0x130/0x130 [target_core_mod]
    target_xcopy_do_work+0x61f/0xc00 [target_core_mod]

    This fix makes target_complete_cmd() queue work on se_cmd->cpuid if
    se_tpg_wwn is NULL.

    Link: https://lore.kernel.org/r/20210720225522.26291-1-ddiss@suse.de
    Fixes: 39ae3edda325 ("scsi: target: core: Make completion affinity configurable")
    Cc: Lee Duncan
    Cc: Mike Christie
    Reviewed-by: Mike Christie
    Signed-off-by: David Disseldorp
    Signed-off-by: Martin K. Petersen

    David Disseldorp
     

19 Jul, 2021

1 commit

  • WRITE SAME(32) command handling reads WRPROTECT at the wrong offset in 1st
    byte instead of 10th byte.

    Link: https://lore.kernel.org/r/20210702091655.22818-1-d.bogdanov@yadro.com
    Fixes: afd73f1b60fc ("target: Perform PROTECT sanity checks for WRITE_SAME")
    Signed-off-by: Dmitry Bogdanov
    Signed-off-by: Martin K. Petersen

    Dmitry Bogdanov
     

10 Jul, 2021

1 commit

  • Pull more block updates from Jens Axboe:
    "A combination of changes that ended up depending on both the driver
    and core branch (and/or the IDE removal), and a few late arriving
    fixes. In detail:

    - Fix io ticks wrap-around issue (Chunguang)

    - nvme-tcp sock locking fix (Maurizio)

    - s390-dasd fixes (Kees, Christoph)

    - blk_execute_rq polling support (Keith)

    - blk-cgroup RCU iteration fix (Yu)

    - nbd backend ID addition (Prasanna)

    - Partition deletion fix (Yufen)

    - Use blk_mq_alloc_disk for mmc, mtip32xx, ubd (Christoph)

    - Removal of now dead block request types due to IDE removal
    (Christoph)

    - Loop probing and control device cleanups (Christoph)

    - Device uevent fix (Christoph)

    - Misc cleanups/fixes (Tetsuo, Christoph)"

    * tag 'block-5.14-2021-07-08' of git://git.kernel.dk/linux-block: (34 commits)
    blk-cgroup: prevent rcu_sched detected stalls warnings while iterating blkgs
    block: fix the problem of io_ticks becoming smaller
    nvme-tcp: can't set sk_user_data without write_lock
    loop: remove unused variable in loop_set_status()
    block: remove the bdgrab in blk_drop_partitions
    block: grab a device refcount in disk_uevent
    s390/dasd: Avoid field over-reading memcpy()
    dasd: unexport dasd_set_target_state
    block: check disk exist before trying to add partition
    ubd: remove dead code in ubd_setup_common
    nvme: use return value from blk_execute_rq()
    block: return errors from blk_execute_rq()
    nvme: use blk_execute_rq() for passthrough commands
    block: support polling through blk_execute_rq
    block: remove REQ_OP_SCSI_{IN,OUT}
    block: mark blk_mq_init_queue_data static
    loop: rewrite loop_exit using idr_for_each_entry
    loop: split loop_lookup
    loop: don't allow deleting an unspecified loop device
    loop: move loop_ctl_mutex locking into loop_add
    ...

    Linus Torvalds
     

03 Jul, 2021

1 commit

  • Pull SCSI updates from James Bottomley:
    "This series consists of the usual driver updates (ufs, ibmvfc,
    megaraid_sas, lpfc, elx, mpi3mr, qedi, iscsi, storvsc, mpt3sas) with
    elx and mpi3mr being new drivers.

    The major core change is a rework to drop the status byte handling
    macros and the old bit shifted definitions and the rest of the updates
    are minor fixes"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (287 commits)
    scsi: aha1740: Avoid over-read of sense buffer
    scsi: arcmsr: Avoid over-read of sense buffer
    scsi: ips: Avoid over-read of sense buffer
    scsi: ufs: ufs-mediatek: Add missing of_node_put() in ufs_mtk_probe()
    scsi: elx: libefc: Fix IRQ restore in efc_domain_dispatch_frame()
    scsi: elx: libefc: Fix less than zero comparison of a unsigned int
    scsi: elx: efct: Fix pointer error checking in debugfs init
    scsi: elx: efct: Fix is_originator return code type
    scsi: elx: efct: Fix link error for _bad_cmpxchg
    scsi: elx: efct: Eliminate unnecessary boolean check in efct_hw_command_cancel()
    scsi: elx: efct: Do not use id uninitialized in efct_lio_setup_session()
    scsi: elx: efct: Fix error handling in efct_hw_init()
    scsi: elx: efct: Remove redundant initialization of variable lun
    scsi: elx: efct: Fix spelling mistake "Unexected" -> "Unexpected"
    scsi: lpfc: Fix build error in lpfc_scsi.c
    scsi: target: iscsi: Remove redundant continue statement
    scsi: qla4xxx: Remove redundant continue statement
    scsi: ppa: Switch to use module_parport_driver()
    scsi: imm: Switch to use module_parport_driver()
    scsi: mpt3sas: Fix error return value in _scsih_expander_add()
    ...

    Linus Torvalds
     

01 Jul, 2021

1 commit

  • With the legacy IDE driver gone drivers now use either REQ_OP_DRV_*
    or REQ_OP_SCSI_*, so unify the two concepts of passthrough requests
    into a single one.

    Reviewed-by: Chaitanya Kulkarni
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

19 Jun, 2021

1 commit


03 Jun, 2021

1 commit

  • Make it possible for the compiler to verify whether SAM and host
    status codes are used correctly.

    [mkp: resolve conflicts with Hannes' SCSI result series]

    Link: https://lore.kernel.org/r/20210524025457.11299-3-bvanassche@acm.org
    Cc: Hannes Reinecke
    Reviewed-by: John Garry
    Reviewed-by: Himanshu Madhani
    Signed-off-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen

    Bart Van Assche
     

01 Jun, 2021

3 commits

  • On realtime kernels, spin_lock_irq*(spinlock_t) do not disable the
    interrupts, a call to irqs_disabled() will return false thus firing a
    warning in __transport_wait_for_tasks().

    Remove the warning and also replace assert_spin_locked() with
    lockdep_assert_held()

    Link: https://lore.kernel.org/r/20210531121326.3649-1-mlombard@redhat.com
    Reviewed-by: Bart Van Assche
    Signed-off-by: Maurizio Lombardi
    Signed-off-by: Martin K. Petersen

    Maurizio Lombardi
     
  • target_complete_cmd() and friends requires a SAM status type, so passing
    GOOD here is actually wrong.

    Link: https://lore.kernel.org/r/20210427083046.31620-40-hare@suse.de
    Reviewed-by: Bart Van Assche
    Signed-off-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    Hannes Reinecke
     
  • Replace the check for DRIVER_SENSE with a check for
    scsi_status_is_check_condition().

    Audit all callsites to ensure the SAM status is set correctly. For
    backwards compability move the DRIVER_SENSE definition to sg.h, and update
    sg, bsg, and scsi_ioctl to set the DRIVER_SENSE driver_status whenever
    SAM_STAT_CHECK_CONDITION is present.

    [mkp: fix zeroday srp warning]

    Link: https://lore.kernel.org/r/20210427083046.31620-10-hare@suse.de
    Signed-off-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen

    fix

    Hannes Reinecke
     

22 May, 2021

4 commits

  • drivers/target/target_core_user.c:1424:9-10: WARNING: return of 0/1 in function 'tcmu_handle_completions' with return type bool

    Return statements in functions returning bool should use
    true/false instead of 1/0.

    Generated by: scripts/coccinelle/misc/boolreturn.cocci

    Link: https://lore.kernel.org/r/20210515230358.GA97544@60d1edce16e0
    Fixes: 9814b55cde05 ("scsi: target: tcmu: Return from tcmu_handle_completions() if cmd_id not found")
    CC: Bodo Stroesser
    Reported-by: kernel test robot
    Acked-by: Bodo Stroesser
    Signed-off-by: kernel test robot
    Signed-off-by: Martin K. Petersen

    kernel test robot
     
  • This has us use raw_smp_processor_id() in iblock's plug_device callout.
    smp_processor_id() is not needed here, because we are running from a per
    CPU work item that is also queued to run on a worker thread that is
    normally bound to a specific CPU. If the worker thread did end up switching
    CPUs then it's handled the same way we handle when the work got moved to a
    different CPU's worker thread, where we will just end up sending I/O from
    the new CPU.

    Link: https://lore.kernel.org/r/20210519222640.5153-1-michael.christie@oracle.com
    Fixes: 415ccd9811da ("scsi: target: iblock: Add backend plug/unplug callouts")
    Signed-off-by: Mike Christie
    Signed-off-by: Martin K. Petersen

    Mike Christie
     
  • Commit f5ce815f34bc ("scsi: target: tcmu: Support DATA_BLOCK_SIZE = N *
    PAGE_SIZE") introduced xas_next() calls to iterate xarray elements. These
    calls triggered the WARNING "suspicious RCU usage" at tcmu device set up
    [1]. In the call stack of xas_next(), xas_load() was called. According to
    its comment, this function requires "the xa_lock or the RCU lock".

    To avoid the warning:

    - Guard the small loop calling xas_next() in tcmu_get_empty_block with RCU
    lock.

    - In the large loop in tcmu_copy_data using RCU lock would possibly
    disable preemtion for a long time (copy multi MBs). Therefore replace
    XA_STATE, xas_set and xas_next with a single xa_load.

    [1]

    [ 1899.867091] =============================
    [ 1899.871199] WARNING: suspicious RCU usage
    [ 1899.875310] 5.13.0-rc1+ #41 Not tainted
    [ 1899.879222] -----------------------------
    [ 1899.883299] include/linux/xarray.h:1182 suspicious rcu_dereference_check() usage!
    [ 1899.890940] other info that might help us debug this:
    [ 1899.899082] rcu_scheduler_active = 2, debug_locks = 1
    [ 1899.905719] 3 locks held by kworker/0:1/1368:
    [ 1899.910161] #0: ffffa1f8c8b98738 ((wq_completion)target_submission){+.+.}-{0:0}, at: process_one_work+0x1ee/0x580
    [ 1899.920732] #1: ffffbd7040cd7e78 ((work_completion)(&q->sq.work)){+.+.}-{0:0}, at: process_one_work+0x1ee/0x580
    [ 1899.931146] #2: ffffa1f8d1c99768 (&udev->cmdr_lock){+.+.}-{3:3}, at: tcmu_queue_cmd+0xea/0x160 [target_core_user]
    [ 1899.941678] stack backtrace:
    [ 1899.946093] CPU: 0 PID: 1368 Comm: kworker/0:1 Not tainted 5.13.0-rc1+ #41
    [ 1899.953070] Hardware name: System manufacturer System Product Name/PRIME Z270-A, BIOS 1302 03/15/2018
    [ 1899.962459] Workqueue: target_submission target_queued_submit_work [target_core_mod]
    [ 1899.970337] Call Trace:
    [ 1899.972839] dump_stack+0x6d/0x89
    [ 1899.976222] xas_descend+0x10e/0x120
    [ 1899.979875] xas_load+0x39/0x50
    [ 1899.983077] tcmu_get_empty_blocks+0x115/0x1c0 [target_core_user]
    [ 1899.989318] queue_cmd_ring+0x1da/0x630 [target_core_user]
    [ 1899.994897] ? rcu_read_lock_sched_held+0x3f/0x70
    [ 1899.999695] ? trace_kmalloc+0xa6/0xd0
    [ 1900.003501] ? __kmalloc+0x205/0x380
    [ 1900.007167] tcmu_queue_cmd+0x12f/0x160 [target_core_user]
    [ 1900.012746] __target_execute_cmd+0x23/0xa0 [target_core_mod]
    [ 1900.018589] transport_generic_new_cmd+0x1f3/0x370 [target_core_mod]
    [ 1900.025046] transport_handle_cdb_direct+0x34/0x50 [target_core_mod]
    [ 1900.031517] target_queued_submit_work+0x43/0xe0 [target_core_mod]
    [ 1900.037837] process_one_work+0x268/0x580
    [ 1900.041952] ? process_one_work+0x580/0x580
    [ 1900.046195] worker_thread+0x55/0x3b0
    [ 1900.049921] ? process_one_work+0x580/0x580
    [ 1900.054192] kthread+0x143/0x160
    [ 1900.057499] ? kthread_create_worker_on_cpu+0x40/0x40
    [ 1900.062661] ret_from_fork+0x1f/0x30

    Link: https://lore.kernel.org/r/20210519135440.26773-1-bostroesser@gmail.com
    Fixes: f5ce815f34bc ("scsi: target: tcmu: Support DATA_BLOCK_SIZE = N * PAGE_SIZE")
    Reported-by: Shin'ichiro Kawasaki
    Tested-by: Shin'ichiro Kawasaki
    Signed-off-by: Bodo Stroesser
    Signed-off-by: Martin K. Petersen

    Bodo Stroesser
     
  • The BUG message "BUG: using smp_processor_id() in preemptible [00000000]
    code" was observed for TCMU devices with kernel config DEBUG_PREEMPT.

    The message was observed when blktests block/005 was run on TCMU devices
    with fileio backend or user:zbc backend [1]. The commit 1130b499b4a7
    ("scsi: target: tcm_loop: Use LIO wq cmd submission helper") triggered the
    symptom. The commit modified work queue to handle commands and changed
    'current->nr_cpu_allowed' at smp_processor_id() call.

    The message was also observed at system shutdown when TCMU devices were not
    cleaned up [2]. The function smp_processor_id() was called in SCSI host
    work queue for abort handling, and triggered the BUG message. This symptom
    was observed regardless of the commit 1130b499b4a7 ("scsi: target:
    tcm_loop: Use LIO wq cmd submission helper").

    To avoid the preemptible code check at smp_processor_id(), get CPU ID with
    raw_smp_processor_id() instead. The CPU ID is used for performance
    improvement then thread move to other CPU will not affect the code.

    [1]

    [ 56.468103] run blktests block/005 at 2021-05-12 14:16:38
    [ 57.369473] check_preemption_disabled: 85 callbacks suppressed
    [ 57.369480] BUG: using smp_processor_id() in preemptible [00000000] code: fio/1511
    [ 57.369506] BUG: using smp_processor_id() in preemptible [00000000] code: fio/1510
    [ 57.369512] BUG: using smp_processor_id() in preemptible [00000000] code: fio/1506
    [ 57.369552] caller is __target_init_cmd+0x157/0x170 [target_core_mod]
    [ 57.369606] CPU: 4 PID: 1506 Comm: fio Not tainted 5.13.0-rc1+ #34
    [ 57.369613] Hardware name: System manufacturer System Product Name/PRIME Z270-A, BIOS 1302 03/15/2018
    [ 57.369617] Call Trace:
    [ 57.369621] BUG: using smp_processor_id() in preemptible [00000000] code: fio/1507
    [ 57.369628] dump_stack+0x6d/0x89
    [ 57.369642] check_preemption_disabled+0xc8/0xd0
    [ 57.369628] caller is __target_init_cmd+0x157/0x170 [target_core_mod]
    [ 57.369655] __target_init_cmd+0x157/0x170 [target_core_mod]
    [ 57.369695] target_init_cmd+0x76/0x90 [target_core_mod]
    [ 57.369732] tcm_loop_queuecommand+0x109/0x210 [tcm_loop]
    [ 57.369744] scsi_queue_rq+0x38e/0xc40
    [ 57.369761] __blk_mq_try_issue_directly+0x109/0x1c0
    [ 57.369779] blk_mq_try_issue_directly+0x43/0x90
    [ 57.369790] blk_mq_submit_bio+0x4e5/0x5d0
    [ 57.369812] submit_bio_noacct+0x46e/0x4e0
    [ 57.369830] __blkdev_direct_IO_simple+0x1a3/0x2d0
    [ 57.369859] ? set_init_blocksize.isra.0+0x60/0x60
    [ 57.369880] generic_file_read_iter+0x89/0x160
    [ 57.369898] blkdev_read_iter+0x44/0x60
    [ 57.369906] new_sync_read+0x102/0x170
    [ 57.369929] vfs_read+0xd4/0x160
    [ 57.369941] __x64_sys_pread64+0x6e/0xa0
    [ 57.369946] ? lockdep_hardirqs_on+0x79/0x100
    [ 57.369958] do_syscall_64+0x3a/0x70
    [ 57.369965] entry_SYSCALL_64_after_hwframe+0x44/0xae
    [ 57.369973] RIP: 0033:0x7f7ed4c1399f
    [ 57.369979] Code: 08 89 3c 24 48 89 4c 24 18 e8 7d f3 ff ff 4c 8b 54 24 18 48 8b 54 24 10 41 89 c0 48 8b 74 24 08 8b 3c 24 b8 11 00 00 00 0f 05 3d 00 f0 ff ff 77 31 44 89 c7 48 89 04 24 e8 cd f3 ff ff 48 8b
    [ 57.369983] RSP: 002b:00007ffd7918c580 EFLAGS: 00000293 ORIG_RAX: 0000000000000011
    [ 57.369990] RAX: ffffffffffffffda RBX: 00000000015b4540 RCX: 00007f7ed4c1399f
    [ 57.369993] RDX: 0000000000001000 RSI: 00000000015de000 RDI: 0000000000000009
    [ 57.369996] RBP: 00000000015b4540 R08: 0000000000000000 R09: 0000000000000001
    [ 57.369999] R10: 0000000000e5c000 R11: 0000000000000293 R12: 00007f7eb5269a70
    [ 57.370002] R13: 0000000000000000 R14: 0000000000001000 R15: 00000000015b4568
    [ 57.370031] CPU: 7 PID: 1507 Comm: fio Not tainted 5.13.0-rc1+ #34
    [ 57.370036] Hardware name: System manufacturer System Product Name/PRIME Z270-A, BIOS 1302 03/15/2018
    [ 57.370039] Call Trace:
    [ 57.370045] dump_stack+0x6d/0x89
    [ 57.370056] check_preemption_disabled+0xc8/0xd0
    [ 57.370068] __target_init_cmd+0x157/0x170 [target_core_mod]
    [ 57.370121] target_init_cmd+0x76/0x90 [target_core_mod]
    [ 57.370178] tcm_loop_queuecommand+0x109/0x210 [tcm_loop]
    [ 57.370197] scsi_queue_rq+0x38e/0xc40
    [ 57.370224] __blk_mq_try_issue_directly+0x109/0x1c0
    ...

    [2]

    [ 117.458597] BUG: using smp_processor_id() in preemptible [00000000] code: kworker/u16:8
    [ 117.467279] caller is __target_init_cmd+0x157/0x170 [target_core_mod]
    [ 117.473893] CPU: 1 PID: 418 Comm: kworker/u16:6 Not tainted 5.13.0-rc1+ #34
    [ 117.481150] Hardware name: System manufacturer System Product Name/PRIME Z270-A, BIOS 8
    [ 117.481153] Workqueue: scsi_tmf_7 scmd_eh_abort_handler
    [ 117.481156] Call Trace:
    [ 117.481158] dump_stack+0x6d/0x89
    [ 117.481162] check_preemption_disabled+0xc8/0xd0
    [ 117.512575] target_submit_tmr+0x41/0x150 [target_core_mod]
    [ 117.519705] tcm_loop_issue_tmr+0xa7/0x100 [tcm_loop]
    [ 117.524913] tcm_loop_abort_task+0x43/0x60 [tcm_loop]
    [ 117.530137] scmd_eh_abort_handler+0x7b/0x230
    [ 117.534681] process_one_work+0x268/0x580
    [ 117.538862] worker_thread+0x55/0x3b0
    [ 117.542652] ? process_one_work+0x580/0x580
    [ 117.548351] kthread+0x143/0x160
    [ 117.551675] ? kthread_create_worker_on_cpu+0x40/0x40
    [ 117.556873] ret_from_fork+0x1f/0x30

    Link: https://lore.kernel.org/r/20210515070315.215801-1-shinichiro.kawasaki@wdc.com
    Fixes: 1526d9f10c61 ("scsi: target: Make state_list per CPU")
    Cc: stable@vger.kernel.org # v5.11+
    Reviewed-by: Mike Christie
    Signed-off-by: Shin'ichiro Kawasaki
    Signed-off-by: Martin K. Petersen

    Shin'ichiro Kawasaki
     

16 May, 2021

2 commits

  • Extend the standard INQUIRY data to 96 bytes and fill in the VERSION
    DESCRIPTOR fields.

    The layout follows SPC-4:

    - SCSI architecture standard
    - SCSI transport protocol standard
    - SCSI primary command set standard
    - SCSI device type command set standard

    All version descriptor values are defined as "no version claimed" because
    some initiators fail to recognize anything else.

    [mkp: whitespace]

    Link: https://lore.kernel.org/r/20210513192804.1252142-3-k.shelekhin@yadro.com
    Reviewed-by: Roman Bolshakov
    Signed-off-by: Konstantin Shelekhin
    Signed-off-by: Martin K. Petersen

    Konstantin Shelekhin
     
  • Bump the SCSI primary command set standard to SPC-4. The upcoming version
    descriptors will report newer SCSI standards (like SBC-3) that are not
    defined in SPC-3.

    Link: https://lore.kernel.org/r/20210513192804.1252142-2-k.shelekhin@yadro.com
    Reviewed-by: Roman Bolshakov
    Signed-off-by: Konstantin Shelekhin
    Signed-off-by: Martin K. Petersen

    Konstantin Shelekhin