• Mike Snitzer's avatar
    dm: allow dm_accept_partial_bio() for dm_io without duplicate bios · 7dd06a25
    Mike Snitzer authored
    The intent behind commit e6fc9f62 ("dm: flag clones created by
    __send_duplicate_bios") was to formally disallow the use of
    dm_accept_partial_bio() where it simply isn't possible -- due to
    constraint that multiple bios cannot meaningfully update a shared
    tio->len_ptr.
    
    But that commit went too far and disallowed the case where "abormal"
    IO (e.g. WRITE_ZEROES) is only using a single bio.  Fix this by
    not marking a dm_io with a single dm_target_io (and bio), that happens
    to be created by __send_duplicate_bios, as DM_TIO_IS_DUPLICATE_BIO.
    Also remove 'unsigned *len' parameter from alloc_multiple_bios().
    
    This commit fixes a dm_accept_partial_bio() BUG_ON() with dm-zoned
    when a WRITE_ZEROES bio is issued.
    
    Fixes: 655f3aad ("dm: switch dm_target_io booleans over to proper flags")
    Reported-by: default avatarShinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    7dd06a25
dm.c 73.3 KB