Re: [PATCH -next v3 6/7] md: factor out a helper rdev_addable() from remove_and_add_spares()
From: Yu Kuai <hidden>
Date: 2023-08-22 02:18:01
Also in:
lkml
Hi, 在 2023/08/22 7:22, Song Liu 写道:
On Sun, Aug 20, 2023 at 2:13 AM Yu Kuai [off-list ref] wrote:quoted
From: Yu Kuai <redacted> There are no functional changes, just to make the code simpler and prepare to delay remove_and_add_spares() to md_start_sync(). Signed-off-by: Yu Kuai <redacted> --- drivers/md/md.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-)diff --git a/drivers/md/md.c b/drivers/md/md.c index 11d27c934fdd..cdc361c521d4 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c@@ -9177,6 +9177,20 @@ static bool rdev_is_spare(struct md_rdev *rdev) !test_bit(Faulty, &rdev->flags); } +static bool rdev_addable(struct md_rdev *rdev) +{ + if (test_bit(Candidate, &rdev->flags) || rdev->raid_disk >= 0 || + test_bit(Faulty, &rdev->flags)) + return false; + + if (!test_bit(Journal, &rdev->flags) && !md_is_rdwr(rdev->mddev) &&Instead of straightforward refactoring, I hope we can make these rdev_* helpers more meaningful, and hopefullly reusable. For example, let's define the meaning of "addable", and write the function to match that meaning. In this case, I think we shouldn't check md_is_rdwr() inside rdev_addable(). Does this make sense?
Yes, this make sense, rdev can be added to read-only array. There are total three callers of pers->hot_add_sisk, I'll try to find if they have common conditions. Thanks, Kuai
Thanks, Songquoted
+ !(rdev->saved_raid_disk >= 0 && + !test_bit(Bitmap_sync, &rdev->flags))) + return false; + + return true; +} + static int remove_and_add_spares(struct mddev *mddev, struct md_rdev *this) {@@ -9227,20 +9241,10 @@ static int remove_and_add_spares(struct mddev *mddev, continue; if (rdev_is_spare(rdev)) spares++; - if (test_bit(Candidate, &rdev->flags)) + if (!rdev_addable(rdev)) continue; - if (rdev->raid_disk >= 0) - continue; - if (test_bit(Faulty, &rdev->flags)) - continue; - if (!test_bit(Journal, &rdev->flags)) { - if (!md_is_rdwr(mddev) && - !(rdev->saved_raid_disk >= 0 && - !test_bit(Bitmap_sync, &rdev->flags))) - continue; - + if (!test_bit(Journal, &rdev->flags)) rdev->recovery_offset = 0; - } if (mddev->pers->hot_add_disk(mddev, rdev) == 0) { /* failure here is OK */ sysfs_link_rdev(mddev, rdev); --2.39.2.