• Mike Christie's avatar
    target: Fix WRITE_SAME/DISCARD conversion to linux 512b sectors · 7a2514f3
    Mike Christie authored
    commit 8a9ebe71 upstream.
    
    In a couple places we are not converting to/from the Linux
    block layer 512 bytes sectors.
    
    1.
    
    The request queue values and what we do are a mismatch of
    things:
    
    max_discard_sectors - This is in linux block layer 512 byte
    sectors. We are just copying this to max_unmap_lba_count.
    
    discard_granularity - This is in bytes. We are converting it
    to Linux block layer 512 byte sectors.
    
    discard_alignment - This is in bytes. We are just copying
    this over.
    
    The problem is that the core LIO code exports these values in
    spc_emulate_evpd_b0 and we use them to test request arguments
    in sbc_execute_unmap, but we never convert to the block size
    we export to the initiator. If we are not using 512 byte sectors
    then we are exporting the wrong values or are checks are off.
    And, for the discard_alignment/bytes case we are just plain messed
    up.
    
    2.
    
    blkdev_issue_discard's start and number of sector arguments
    are supposed to be in linux block layer 512 byte sectors. We are
    currently passing in the values we get from the initiator which
    might be based on some other sector size.
    
    There is a similar problem in iblock_execute_write_same where
    the bio functions want values in 512 byte sectors but we are
    passing in what we got from the initiator.
    Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    [ luis: backported to 3.16:
      - dropped changes to attribute unmap_zeroes_data as 3.16 doesn't
        support LBPRZ
      - functions rename:
        * fd_execute_unmap -> fd_do_unmap
        * iblock_execute_unmap -> iblock_do_unmap
      - adjusted context ]
    Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
    7a2514f3
target_core_device.c 46.8 KB