• Mike Snitzer's avatar
    dm: fix __send_duplicate_bios() to always allow for splitting IO · 666eed46
    Mike Snitzer authored
    Commit 7dd76d1f ("dm: improve bio splitting and associated IO
    accounting") only called setup_split_accounting() from
    __send_duplicate_bios() if a single bio were being issued. But the case
    where duplicate bios are issued must call it too.
    
    Otherwise the bio won't be split and resubmitted (via recursion through
    block core back to DM) to submit the later portions of a bio (which may
    map to an entirely different target).
    
    For example, when discarding an entire DM striped device with the
    following DM table:
     vg-lvol0: 0 159744 striped 2 128 7:0 2048 7:1 2048
     vg-lvol0: 159744 45056 striped 2 128 7:2 2048 7:3 2048
    
    Before (broken, discards the first striped target's devices twice):
     device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=79872
     device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=79872
     device-mapper: striped: target_stripe=0, bdev=7:0, start=2049 len=22528
     device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=22528
    
    After (works as expected):
     device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=79872
     device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=79872
     device-mapper: striped: target_stripe=0, bdev=7:2, start=2048 len=22528
     device-mapper: striped: target_stripe=1, bdev=7:3, start=2048 len=22528
    
    Fixes: 7dd76d1f ("dm: improve bio splitting and associated IO accounting")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarOrange Kao <orange@aiven.io>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    666eed46
dm.c 78.3 KB