• Song Liu's avatar
    md/r5cache: State machine for raid5-cache write back mode · 2ded3703
    Song Liu authored
    This patch adds state machine for raid5-cache. With log device, the
    raid456 array could operate in two different modes (r5c_journal_mode):
      - write-back (R5C_MODE_WRITE_BACK)
      - write-through (R5C_MODE_WRITE_THROUGH)
    
    Existing code of raid5-cache only has write-through mode. For write-back
    cache, it is necessary to extend the state machine.
    
    With write-back cache, every stripe could operate in two different
    phases:
      - caching
      - writing-out
    
    In caching phase, the stripe handles writes as:
      - write to journal
      - return IO
    
    In writing-out phase, the stripe behaviors as a stripe in write through
    mode R5C_MODE_WRITE_THROUGH.
    
    STRIPE_R5C_CACHING is added to sh->state to differentiate caching and
    writing-out phase.
    
    Please note: this is a "no-op" patch for raid5-cache write-through
    mode.
    
    The following detailed explanation is copied from the raid5-cache.c:
    
    /*
     * raid5 cache state machine
     *
     * With rhe RAID cache, each stripe works in two phases:
     *      - caching phase
     *      - writing-out phase
     *
     * These two phases are controlled by bit STRIPE_R5C_CACHING:
     *   if STRIPE_R5C_CACHING == 0, the stripe is in writing-out phase
     *   if STRIPE_R5C_CACHING == 1, the stripe is in caching phase
     *
     * When there is no journal, or the journal is in write-through mode,
     * the stripe is always in writing-out phase.
     *
     * For write-back journal, the stripe is sent to caching phase on write
     * (r5c_handle_stripe_dirtying). r5c_make_stripe_write_out() kicks off
     * the write-out phase by clearing STRIPE_R5C_CACHING.
     *
     * Stripes in caching phase do not write the raid disks. Instead, all
     * writes are committed from the log device. Therefore, a stripe in
     * caching phase handles writes as:
     *      - write to log device
     *      - return IO
     *
     * Stripes in writing-out phase handle writes as:
     *      - calculate parity
     *      - write pending data and parity to journal
     *      - write data and parity to raid disks
     *      - return IO for pending writes
     */
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    2ded3703
raid5.c 223 KB