• Tejun Heo's avatar
    dm: implement REQ_FLUSH/FUA support for request-based dm · 29e4013d
    Tejun Heo authored
    This patch converts request-based dm to support the new REQ_FLUSH/FUA.
    
    The original request-based flush implementation depended on
    request_queue blocking other requests while a barrier sequence is in
    progress, which is no longer true for the new REQ_FLUSH/FUA.
    
    In general, request-based dm doesn't have infrastructure for cloning
    one source request to multiple targets, but the original flush
    implementation had a special mostly independent path which can issue
    flushes to multiple targets and sequence them.  However, the
    capability isn't currently in use and adds a lot of complexity.
    Moreoever, it's unlikely to be useful in its current form as it
    doesn't make sense to be able to send out flushes to multiple targets
    when write requests can't be.
    
    This patch rips out special flush code path and deals handles
    REQ_FLUSH/FUA requests the same way as other requests.  The only
    special treatment is that REQ_FLUSH requests use the block address 0
    when finding target, which is enough for now.
    
    * added BUG_ON(!dm_target_is_valid(ti)) in dm_request_fn() as
      suggested by Mike Snitzer
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarMike Snitzer <snitzer@redhat.com>
    Tested-by: default avatarKiyoshi Ueda <k-ueda@ct.jp.nec.com>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    29e4013d
dm.c 60.3 KB