Skip to content
  • Nicholas Bellinger's avatar
    target: Fix task count > 1 handling breakage and use max_sector page alignment · 525a48a2
    Nicholas Bellinger authored
    
    
    This patch addresses recent breakage with multiple se_task (task_count > 1)
    operation following backend dev->se_sub_dev->se_dev_attrib.max_sectors in new
    transport_allocate_data_tasks() code.  The initial bug here was a bogus
    task->task_sg_nents assignment in transport_allocate_data_tasks() based on
    the passed parameter, which now uses DIV_ROUND_UP(task_size, PAGE_SIZE) to
    determine the proper number of per task SGL entries for the (task_count > 1)
    case.
    
    This also means we now need to enforce a PAGE_SIZE aligned max_sector count
    value for this to work as expected without bringing back the pre v3.1
    transport_map_mem_to_sg() logic to handle SGL offsets across multiple tasks.
    So this patch adds se_dev_align_max_sectors() to round down max_sectors as
    necessary to ensure this alignment via se_dev_set_default_attribs() and
    se_dev_align_max_sectors() and keeps it simple for (task_count > 1)
    operation.
    
    So far this bugfix has been tested with (task_count > 1) operation
    using iscsi-target and iblock backends.
    
    Reported-by: default avatarChris Boot <bootc@bootc.net>
    Cc: Kiran Patil <kiran.patil@intel.com>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    525a48a2