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

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

 



Hi,


在 2025/8/14 15:09, Li Nan 写道:


在 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()?


Good point, thanks.


Qixing


  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();
              }






[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