Re: [PATCH v3 1/2] md: add helper rdev_needs_recovery()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





在 2025/8/14 9:57, Zheng Qixing 写道:
From: Zheng Qixing <zhengqixing@xxxxxxxxxx>

Add a helper for checking if an rdev needs recovery.

Signed-off-by: Zheng Qixing <zhengqixing@xxxxxxxxxx>
Reviewed-by: Paul Menzel <pmenzel@xxxxxxxxxxxxx>
Reviewed-by: Yu Kuai <yukuai3@xxxxxxxxxx>
---
  drivers/md/md.c | 18 ++++++++++--------
  1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index ac85ec73a409..4663e172864e 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -4835,6 +4835,14 @@ metadata_store(struct mddev *mddev, const char *buf, size_t len)
  static struct md_sysfs_entry md_metadata =
  __ATTR_PREALLOC(metadata_version, S_IRUGO|S_IWUSR, metadata_show, metadata_store);
+static bool rdev_needs_recovery(struct md_rdev *rdev, sector_t sectors)
+{
+	return !test_bit(Journal, &rdev->flags) &&
+	       !test_bit(Faulty, &rdev->flags) &&
+	       !test_bit(In_sync, &rdev->flags) &&
+	       rdev->recovery_offset < sectors;
+}
+

Every caller is already checking 'rdev->raid_disk >= 0'. Should we move it
into rdev_needs_recovery()?

  enum sync_action md_sync_action(struct mddev *mddev)
  {
  	unsigned long recovery = mddev->recovery;
@@ -8969,10 +8977,7 @@ static sector_t md_sync_position(struct mddev *mddev, enum sync_action action)
  		rcu_read_lock();
  		rdev_for_each_rcu(rdev, mddev)
  			if (rdev->raid_disk >= 0 &&
-			    !test_bit(Journal, &rdev->flags) &&
-			    !test_bit(Faulty, &rdev->flags) &&
-			    !test_bit(In_sync, &rdev->flags) &&
-			    rdev->recovery_offset < start)
+			    rdev_needs_recovery(rdev, start))
  				start = rdev->recovery_offset;
  		rcu_read_unlock();
@@ -9333,10 +9338,7 @@ void md_do_sync(struct md_thread *thread)
  				rdev_for_each_rcu(rdev, mddev)
  					if (rdev->raid_disk >= 0 &&
  					    mddev->delta_disks >= 0 &&
-					    !test_bit(Journal, &rdev->flags) &&
-					    !test_bit(Faulty, &rdev->flags) &&
-					    !test_bit(In_sync, &rdev->flags) &&
-					    rdev->recovery_offset < mddev->curr_resync)
+					    rdev_needs_recovery(rdev, mddev->curr_resync))
  						rdev->recovery_offset = mddev->curr_resync;
  				rcu_read_unlock();
  			}

--
Thanks,
Nan





[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux