• Guoqing Jiang's avatar
    md/raid1: fix potential data inconsistency issue with write behind device · 3e148a32
    Guoqing Jiang authored
    For write-behind mode, we think write IO is complete once it has
    reached all the non-writemostly devices. It works fine for single
    queue devices.
    
    But for multiqueue device, if there are lots of IOs come from upper
    layer, then the write-behind device could issue those IOs to different
    queues, depends on the each queue's delay, so there is no guarantee
    that those IOs can arrive in order.
    
    To address the issue, we need to check the collision among write
    behind IOs, we can only continue without collision, otherwise wait
    for the completion of previous collisioned IO.
    
    And WBCollision is introduced for multiqueue device which is worked
    under write-behind mode.
    
    But this patch doesn't handle below cases which could have the data
    inconsistency issue as well, these cases will be handled in later
    patches.
    
    1. modify max_write_behind by write backlog node.
    2. add or remove array's bitmap dynamically.
    3. the change of member disk.
    Reviewed-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarGuoqing Jiang <gqjiang@suse.com>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    3e148a32
raid1.c 91.8 KB