• Yu Kuai's avatar
    md: initialize 'writes_pending' while allocating mddev · b8494823
    Yu Kuai authored
    Currently 'writes_pending' is initialized in pers->run for raid1/5/10,
    and it's freed while deleing mddev, instead of pers->free. pers->run can
    be called multiple times before mddev is deleted, and a helper
    mddev_init_writes_pending() is used to prevent 'writes_pending' to be
    initialized multiple times, this usage is safe but a litter weird.
    
    On the other hand, 'writes_pending' is only initialized for raid1/5/10,
    however, it's used in common layer, for example:
    
    array_state_store
     set_in_sync
      if (!mddev->in_sync) -> in_sync is used for all levels
       // access writes_pending
    
    There might be some implicit dependency that I don't recognized to make
    sure 'writes_pending' can only be accessed for raid1/5/10, but there are
    no comments about that.
    
    By the way, it make sense to initialize 'writes_pending' in common layer
    because there are already three levels use it.
    Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
    Signed-off-by: default avatarSong Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230825030956.1527023-3-yukuai1@huaweicloud.com
    b8494823
md.c 264 KB