• Mikulas Patocka's avatar
    dm: optimize flushes · aaa53168
    Mikulas Patocka authored
    Device mapper sends flush bios to all the targets and the targets send it
    to the underlying device. That may be inefficient, for example if a table
    contains 10 linear targets pointing to the same physical device, then
    device mapper would send 10 flush bios to that device - despite the fact
    that only one bio would be sufficient.
    
    This commit optimizes the flush behavior. It introduces a per-target
    variable flush_bypasses_map - it is set when the target supports flush
    optimization - currently, the dm-linear and dm-stripe targets support it.
    When all the targets in a table have flush_bypasses_map,
    flush_bypasses_map on the table is set. __send_empty_flush tests if the
    table has flush_bypasses_map - and if it has, no flush bios are sent to
    the targets via the "map" method and the list dm_table->devices is
    iterated and the flush bios are sent to each member of the list.
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Reviewed-by: default avatarMike Snitzer <snitzer@kernel.org>
    Suggested-by: default avatarYang Yang <yang.yang@vivo.com>
    aaa53168
dm-table.c 47.9 KB