]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
md/md-bitmap: add 'events_cleared' into struct md_bitmap_stats
authorYu Kuai <yukuai3@huawei.com>
Mon, 26 Aug 2024 07:44:14 +0000 (15:44 +0800)
committerSong Liu <song@kernel.org>
Tue, 27 Aug 2024 17:14:14 +0000 (10:14 -0700)
Also add a new helper to get events_cleared to avoid dereferencing
bitmap directly to prepare inventing a new bitmap.

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Link: https://lore.kernel.org/r/20240826074452.1490072-5-yukuai1@huaweicloud.com
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/md-bitmap.c
drivers/md/md-bitmap.h
drivers/md/md.c

index 66ebe12d80ae50e940dce7fd1daf1dd21d13d9a8..95afc22bd2557119babf34c4c48902c2c031ed70 100644 (file)
@@ -2104,6 +2104,8 @@ int md_bitmap_get_stats(struct bitmap *bitmap, struct md_bitmap_stats *stats)
        counts = &bitmap->counts;
        stats->missing_pages = counts->missing_pages;
        stats->pages = counts->pages;
+
+       stats->events_cleared = bitmap->events_cleared;
        stats->file = bitmap->storage.file;
 
        return 0;
index b60418e3f573799d93b6f4c36c52eaf163530111..751dca2366c354475fafcbfb9962e720238b8f04 100644 (file)
@@ -235,6 +235,7 @@ struct bitmap {
 };
 
 struct md_bitmap_stats {
+       u64             events_cleared;
        unsigned long   missing_pages;
        unsigned long   pages;
        struct file     *file;
index 0cca8d3acfe30a939b581ab7f3567bffaded2add..cde6663c7fcb8980b721467dcffb8a29f24a2218 100644 (file)
@@ -1372,6 +1372,18 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
        return ret;
 }
 
+static u64 md_bitmap_events_cleared(struct mddev *mddev)
+{
+       struct md_bitmap_stats stats;
+       int err;
+
+       err = md_bitmap_get_stats(mddev->bitmap, &stats);
+       if (err)
+               return 0;
+
+       return stats.events_cleared;
+}
+
 /*
  * validate_super for 0.90.0
  * note: we are not using "freshest" for 0.9 superblock
@@ -1464,7 +1476,7 @@ static int super_90_validate(struct mddev *mddev, struct md_rdev *freshest, stru
                /* if adding to array with a bitmap, then we can accept an
                 * older device ... but not too old.
                 */
-               if (ev1 < mddev->bitmap->events_cleared)
+               if (ev1 < md_bitmap_events_cleared(mddev))
                        return 0;
                if (ev1 < mddev->events)
                        set_bit(Bitmap_sync, &rdev->flags);
@@ -1991,7 +2003,7 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *freshest, struc
                /* If adding to array with a bitmap, then we can accept an
                 * older device, but not too old.
                 */
-               if (ev1 < mddev->bitmap->events_cleared)
+               if (ev1 < md_bitmap_events_cleared(mddev))
                        return 0;
                if (ev1 < mddev->events)
                        set_bit(Bitmap_sync, &rdev->flags);