• Goldwyn Rodrigues's avatar
    md-cluster: Call update_raid_disks() if another node --grow's raid_disks · 28c1b9fd
    Goldwyn Rodrigues authored
    To incorporate --grow feature executed on one node, other nodes need to
    acknowledge the change in number of disks. Call update_raid_disks()
    to update internal data structures.
    
    This leads to call check_reshape() -> md_allow_write() -> md_update_sb(),
    this results in a deadlock. This is done so it can safely allocate memory
    (which might trigger writeback which might write to raid1). This is
    not required for md with a bitmap.
    
    In the clustered case, we don't perform md_update_sb() in md_allow_write(),
    but in do_md_run(). Also we disable safemode for clustered mode.
    
    mddev->recovery_cp need not be set in check_sb_changes() because this
    is required only when a node reads another node's bitmap. mddev->recovery_cp
    (which is read from sb->resync_offset), is set only if mddev is in_sync.
    Since we disabled safemode, in_sync is set to zero.
    In a clustered environment, the MD may not be in sync because another
    node could be writing to it. So make sure that in_sync is not set in
    case of clustered node in __md_stop_writes().
    Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    28c1b9fd
md.c 237 KB