• Mike Snitzer's avatar
    dm: add dm_submit_bio_remap interface · 0fbb4d93
    Mike Snitzer authored
    Where possible, switch from early bio-based IO accounting (at the time
    DM clones each incoming bio) to late IO accounting just before each
    remapped bio is issued to underlying device via submit_bio_noacct().
    
    Allows more precise bio-based IO accounting for DM targets that use
    their own workqueues to perform additional processing of each bio in
    conjunction with their DM_MAPIO_SUBMITTED return from their map
    function. When a target is updated to use dm_submit_bio_remap() they
    must also set ti->accounts_remapped_io to true.
    
    Use xchg() in start_io_acct(), as suggested by Mikulas, to ensure each
    IO is only started once.  The xchg race only happens if
    __send_duplicate_bios() sends multiple bios -- that case is reflected
    via tio->is_duplicate_bio.  Given the niche nature of this race, it is
    best to avoid any xchg performance penalty for normal IO.
    
    For IO that was never submitted with dm_bio_submit_remap(), but the
    target completes the clone with bio_endio, accounting is started then
    ended and pending_io counter decremented.
    Reviewed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    0fbb4d93
dm.c 69.3 KB