• JackieLiu's avatar
    md/raid5-cache: adjust the write position of the empty block if no data blocks · 43b96748
    JackieLiu authored
    When recovery is complete, we write an empty block and record his
    position first, then make the data-only stripes rewritten done,
    the location of the empty block as the last checkpoint position
    to write into the super block. And we should update last_checkpoint
    to this empty block position.
    
    ------------------------------------------------------------------
    |  old log       | empty block | data only stripes | invalid log |
    ------------------------------------------------------------------
    ^                ^                                 ^
    |                |- log->last_checkpoint           |- log->log_start
    |                |- log->last_cp_seq               |- log->next_checkpoint
    |- log->seq=n    |- log->seq=10+n
    
    At the same time, if there is no data-only stripes, this scene may appear,
    | meta1 | meta2 | meta3 |
    meta 1 is valid, meta 2 is invalid. meta 3 could be valid. so we should
    The solution is we create a new meta in meta2 with its seq == meta1's
    seq + 10 and let superblock points to meta2.
    Signed-off-by: default avatarJackieLiu <liuyun01@kylinos.cn>
    Reviewed-by: default avatarZhengyuan Liu <liuzhengyuan@kylinos.cn>
    Reviewed-by: default avatarSong Liu <songliubraving@fb.com>
    Signed-off-by: default avatarShaohua Li <shli@fb.com>
    43b96748
raid5-cache.c 72.5 KB