• Heinz Mauelshagen's avatar
    dm raid: add raid4/5/6 journaling support · 63c32ed4
    Heinz Mauelshagen authored
    Add md raid4/5/6 journaling support (upstream commit bac624f3 started
    the implementation) which closes the write hole (i.e. non-atomic updates
    to stripes) using a dedicated journal device.
    
    Background:
    raid4/5/6 stripes hold N data payloads per stripe plus one parity raid4/5
    or two raid6 P/Q syndrome payloads in an in-memory stripe cache.
    Parity or P/Q syndromes used to recover any data payloads in case of a disk
    failure are calculated from the N data payloads and need to be updated on the
    different component devices of the raid device.  Those are non-atomic,
    persistent updates.  Hence a crash can cause failure to update all stripe
    payloads persistently and thus cause data loss during stripe recovery.
    This problem gets addressed by writing whole stripe cache entries (together with
    journal metadata) to a persistent journal entry on a dedicated journal device.
    Only if that journal entry is written successfully, the stripe cache entry is
    updated on the component devices of the raid device (i.e. writethrough type).
    In case of a crash, the entry can be recovered from the journal and be written
    again thus ensuring consistent stripe payload suitable to data recovery.
    
    Future dependencies:
    once writeback caching being worked on to compensate for the throughput
    implictions involved with writethrough overhead is supported with journaling
    in upstream, an additional patch based on this one will support it in dm-raid.
    
    Journal resilience related remarks:
    because stripes are recovered from the journal in case of a crash, the
    journal device better be resilient.  Resilience becomes mandatory with
    future writeback support, because loosing the working set in the log
    means data loss as oposed to writethrough, were the loss of the
    journal device 'only' reintroduces the write hole.
    
    Fix comment on data offsets in parse_dev_params() and initialize
    new_data_offset as well.
    Signed-off-by: default avatarHeinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    63c32ed4
dm-raid.txt 15 KB