• David Disseldorp's avatar
    target: use XCOPY segment descriptor CSCD IDs · 66640d35
    David Disseldorp authored
    The XCOPY specification in SPC4r37 states that the XCOPY source and
    destination device(s) should be derived from the copy source and copy
    destination (CSCD) descriptor IDs in the XCOPY segment descriptor.
    
    The CSCD IDs are generally (for block -> block copies), indexes into
    the corresponding CSCD descriptor list, e.g.
    =================================
    EXTENDED COPY Header
    =================================
    CSCD Descriptor List
    - entry 0
      + LU ID <--------------<------------------\
    - entry 1                                   |
      + LU ID <______________<_____________     |
    =================================      |    |
    Segment Descriptor List                |    |
    - segment 0                            |    |
      + src CSCD ID = 0 --------->---------+----/
      + dest CSCD ID = 1 ___________>______|
      + len
      + src lba
      + dest lba
    =================================
    
    Currently LIO completely ignores the src and dest CSCD IDs in the
    Segment Descriptor List, and instead assumes that the first entry in the
    CSCD list corresponds to the source, and the second to the destination.
    
    This commit removes this assumption, by ensuring that the Segment
    Descriptor List is parsed prior to processing the CSCD Descriptor List.
    CSCD Descriptor List processing is modified to compare the current list
    index with the previously obtained src and dest CSCD IDs.
    
    Additionally, XCOPY requests where the src and dest CSCD IDs refer to
    the CSCD Descriptor List entry can now be successfully processed.
    
    Fixes: cbf031f4 ("target: Add support for EXTENDED_COPY copy offload")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=191381Signed-off-by: default avatarDavid Disseldorp <ddiss@suse.de>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
    66640d35
target_core_xcopy.c 29.5 KB