• Nikos Tsironis's avatar
    dm clone metadata: Use a two phase commit · 8fdbfe8d
    Nikos Tsironis authored
    Split the metadata commit in two parts:
    
    1. dm_clone_metadata_pre_commit(): Prepare the current transaction for
       committing. After this is called, all subsequent metadata updates,
       done through either dm_clone_set_region_hydrated() or
       dm_clone_cond_set_range(), will be part of the next transaction.
    
    2. dm_clone_metadata_commit(): Actually commit the current transaction
       to disk and start a new transaction.
    
    This is required by the following commit. It allows dm-clone to flush
    the destination device after step (1) to ensure that all freshly
    hydrated regions, for which we are updating the metadata, are properly
    written to non-volatile storage and won't be lost in case of a crash.
    
    Fixes: 7431b783 ("dm: add clone target")
    Cc: stable@vger.kernel.org # v5.4+
    Signed-off-by: default avatarNikos Tsironis <ntsironis@arrikto.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    8fdbfe8d
dm-clone-metadata.h 5.64 KB