Skip to content

Commit cb0780a

Browse files
Zheng QixingYuKuai-huawei
authored andcommitted
md: add helper rdev_needs_recovery()
Add a helper for checking if an rdev needs recovery. Signed-off-by: Zheng Qixing <zhengqixing@huawei.com> Link: https://lore.kernel.org/linux-raid/20250816002534.1754356-2-zhengqixing@huaweicloud.com Signed-off-by: Yu Kuai <yukuai3@huawei.com>
1 parent c279732 commit cb0780a

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

drivers/md/md.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4839,6 +4839,15 @@ metadata_store(struct mddev *mddev, const char *buf, size_t len)
48394839
static struct md_sysfs_entry md_metadata =
48404840
__ATTR_PREALLOC(metadata_version, S_IRUGO|S_IWUSR, metadata_show, metadata_store);
48414841

4842+
static bool rdev_needs_recovery(struct md_rdev *rdev, sector_t sectors)
4843+
{
4844+
return rdev->raid_disk >= 0 &&
4845+
!test_bit(Journal, &rdev->flags) &&
4846+
!test_bit(Faulty, &rdev->flags) &&
4847+
!test_bit(In_sync, &rdev->flags) &&
4848+
rdev->recovery_offset < sectors;
4849+
}
4850+
48424851
enum sync_action md_sync_action(struct mddev *mddev)
48434852
{
48444853
unsigned long recovery = mddev->recovery;
@@ -8995,11 +9004,7 @@ static sector_t md_sync_position(struct mddev *mddev, enum sync_action action)
89959004
start = MaxSector;
89969005
rcu_read_lock();
89979006
rdev_for_each_rcu(rdev, mddev)
8998-
if (rdev->raid_disk >= 0 &&
8999-
!test_bit(Journal, &rdev->flags) &&
9000-
!test_bit(Faulty, &rdev->flags) &&
9001-
!test_bit(In_sync, &rdev->flags) &&
9002-
rdev->recovery_offset < start)
9007+
if (rdev_needs_recovery(rdev, start))
90039008
start = rdev->recovery_offset;
90049009
rcu_read_unlock();
90059010

@@ -9358,12 +9363,8 @@ void md_do_sync(struct md_thread *thread)
93589363
test_bit(MD_RECOVERY_RECOVER, &mddev->recovery)) {
93599364
rcu_read_lock();
93609365
rdev_for_each_rcu(rdev, mddev)
9361-
if (rdev->raid_disk >= 0 &&
9362-
mddev->delta_disks >= 0 &&
9363-
!test_bit(Journal, &rdev->flags) &&
9364-
!test_bit(Faulty, &rdev->flags) &&
9365-
!test_bit(In_sync, &rdev->flags) &&
9366-
rdev->recovery_offset < mddev->curr_resync)
9366+
if (mddev->delta_disks >= 0 &&
9367+
rdev_needs_recovery(rdev, mddev->curr_resync))
93679368
rdev->recovery_offset = mddev->curr_resync;
93689369
rcu_read_unlock();
93699370
}

0 commit comments

Comments
 (0)