Skip to content

Commit 984ff00

Browse files
committed
Merge tag 'md-6.17-20250803' of gitolite.kernel.org:pub/scm/linux/kernel/git/mdraid/linux into block-6.17
Pull MD changes from Yu: "- mddev null-ptr-dereference fix, by Erkun - md-cluster fail to remove the faulty disk regression fix, by Heming - minor cleanup, by Li Nan and Jinchao - mdadm lifetime regression fix reported by syzkaller, by Yu Kuai" * tag 'md-6.17-20250803' of gitolite.kernel.org:pub/scm/linux/kernel/git/mdraid/linux: md: make rdev_addable usable for rcu mode md/raid1: remove struct pool_info and related code md/raid1: change r1conf->r1bio_pool to a pointer type md: rename recovery_cp to resync_offset md/md-cluster: handle REMOVE message earlier md: fix create on open mddev lifetime regression
2 parents fad6551 + 13017b4 commit 984ff00

File tree

13 files changed

+145
-174
lines changed

13 files changed

+145
-174
lines changed

drivers/md/dm-raid.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ static bool rs_is_reshapable(struct raid_set *rs)
439439
/* Return true, if raid set in @rs is recovering */
440440
static bool rs_is_recovering(struct raid_set *rs)
441441
{
442-
return rs->md.recovery_cp < rs->md.dev_sectors;
442+
return rs->md.resync_offset < rs->md.dev_sectors;
443443
}
444444

445445
/* Return true, if raid set in @rs is reshaping */
@@ -769,7 +769,7 @@ static struct raid_set *raid_set_alloc(struct dm_target *ti, struct raid_type *r
769769
rs->md.layout = raid_type->algorithm;
770770
rs->md.new_layout = rs->md.layout;
771771
rs->md.delta_disks = 0;
772-
rs->md.recovery_cp = MaxSector;
772+
rs->md.resync_offset = MaxSector;
773773

774774
for (i = 0; i < raid_devs; i++)
775775
md_rdev_init(&rs->dev[i].rdev);
@@ -913,7 +913,7 @@ static int parse_dev_params(struct raid_set *rs, struct dm_arg_set *as)
913913
rs->md.external = 0;
914914
rs->md.persistent = 1;
915915
rs->md.major_version = 2;
916-
} else if (rebuild && !rs->md.recovery_cp) {
916+
} else if (rebuild && !rs->md.resync_offset) {
917917
/*
918918
* Without metadata, we will not be able to tell if the array
919919
* is in-sync or not - we must assume it is not. Therefore,
@@ -1696,20 +1696,20 @@ static void rs_setup_recovery(struct raid_set *rs, sector_t dev_sectors)
16961696
{
16971697
/* raid0 does not recover */
16981698
if (rs_is_raid0(rs))
1699-
rs->md.recovery_cp = MaxSector;
1699+
rs->md.resync_offset = MaxSector;
17001700
/*
17011701
* A raid6 set has to be recovered either
17021702
* completely or for the grown part to
17031703
* ensure proper parity and Q-Syndrome
17041704
*/
17051705
else if (rs_is_raid6(rs))
1706-
rs->md.recovery_cp = dev_sectors;
1706+
rs->md.resync_offset = dev_sectors;
17071707
/*
17081708
* Other raid set types may skip recovery
17091709
* depending on the 'nosync' flag.
17101710
*/
17111711
else
1712-
rs->md.recovery_cp = test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)
1712+
rs->md.resync_offset = test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags)
17131713
? MaxSector : dev_sectors;
17141714
}
17151715

@@ -2144,7 +2144,7 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
21442144
sb->events = cpu_to_le64(mddev->events);
21452145

21462146
sb->disk_recovery_offset = cpu_to_le64(rdev->recovery_offset);
2147-
sb->array_resync_offset = cpu_to_le64(mddev->recovery_cp);
2147+
sb->array_resync_offset = cpu_to_le64(mddev->resync_offset);
21482148

21492149
sb->level = cpu_to_le32(mddev->level);
21502150
sb->layout = cpu_to_le32(mddev->layout);
@@ -2335,18 +2335,18 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
23352335
}
23362336

23372337
if (!test_bit(__CTR_FLAG_NOSYNC, &rs->ctr_flags))
2338-
mddev->recovery_cp = le64_to_cpu(sb->array_resync_offset);
2338+
mddev->resync_offset = le64_to_cpu(sb->array_resync_offset);
23392339

23402340
/*
23412341
* During load, we set FirstUse if a new superblock was written.
23422342
* There are two reasons we might not have a superblock:
23432343
* 1) The raid set is brand new - in which case, all of the
23442344
* devices must have their In_sync bit set. Also,
2345-
* recovery_cp must be 0, unless forced.
2345+
* resync_offset must be 0, unless forced.
23462346
* 2) This is a new device being added to an old raid set
23472347
* and the new device needs to be rebuilt - in which
23482348
* case the In_sync bit will /not/ be set and
2349-
* recovery_cp must be MaxSector.
2349+
* resync_offset must be MaxSector.
23502350
* 3) This is/are a new device(s) being added to an old
23512351
* raid set during takeover to a higher raid level
23522352
* to provide capacity for redundancy or during reshape
@@ -2391,8 +2391,8 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
23912391
new_devs > 1 ? "s" : "");
23922392
return -EINVAL;
23932393
} else if (!test_bit(__CTR_FLAG_REBUILD, &rs->ctr_flags) && rs_is_recovering(rs)) {
2394-
DMERR("'rebuild' specified while raid set is not in-sync (recovery_cp=%llu)",
2395-
(unsigned long long) mddev->recovery_cp);
2394+
DMERR("'rebuild' specified while raid set is not in-sync (resync_offset=%llu)",
2395+
(unsigned long long) mddev->resync_offset);
23962396
return -EINVAL;
23972397
} else if (rs_is_reshaping(rs)) {
23982398
DMERR("'rebuild' specified while raid set is being reshaped (reshape_position=%llu)",
@@ -2697,11 +2697,11 @@ static int rs_adjust_data_offsets(struct raid_set *rs)
26972697
}
26982698
out:
26992699
/*
2700-
* Raise recovery_cp in case data_offset != 0 to
2700+
* Raise resync_offset in case data_offset != 0 to
27012701
* avoid false recovery positives in the constructor.
27022702
*/
2703-
if (rs->md.recovery_cp < rs->md.dev_sectors)
2704-
rs->md.recovery_cp += rs->dev[0].rdev.data_offset;
2703+
if (rs->md.resync_offset < rs->md.dev_sectors)
2704+
rs->md.resync_offset += rs->dev[0].rdev.data_offset;
27052705

27062706
/* Adjust data offsets on all rdevs but on any raid4/5/6 journal device */
27072707
rdev_for_each(rdev, &rs->md) {
@@ -2756,15 +2756,15 @@ static int rs_setup_takeover(struct raid_set *rs)
27562756
}
27572757

27582758
clear_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
2759-
mddev->recovery_cp = MaxSector;
2759+
mddev->resync_offset = MaxSector;
27602760

27612761
while (d--) {
27622762
rdev = &rs->dev[d].rdev;
27632763

27642764
if (test_bit(d, (void *) rs->rebuild_disks)) {
27652765
clear_bit(In_sync, &rdev->flags);
27662766
clear_bit(Faulty, &rdev->flags);
2767-
mddev->recovery_cp = rdev->recovery_offset = 0;
2767+
mddev->resync_offset = rdev->recovery_offset = 0;
27682768
/* Bitmap has to be created when we do an "up" takeover */
27692769
set_bit(MD_ARRAY_FIRST_USE, &mddev->flags);
27702770
}
@@ -3222,7 +3222,7 @@ static int raid_ctr(struct dm_target *ti, unsigned int argc, char **argv)
32223222
if (r)
32233223
goto bad;
32243224

3225-
rs_setup_recovery(rs, rs->md.recovery_cp < rs->md.dev_sectors ? rs->md.recovery_cp : rs->md.dev_sectors);
3225+
rs_setup_recovery(rs, rs->md.resync_offset < rs->md.dev_sectors ? rs->md.resync_offset : rs->md.dev_sectors);
32263226
} else {
32273227
/* This is no size change or it is shrinking, update size and record in superblocks */
32283228
r = rs_set_dev_and_array_sectors(rs, rs->ti->len, false);
@@ -3446,7 +3446,7 @@ static sector_t rs_get_progress(struct raid_set *rs, unsigned long recovery,
34463446

34473447
} else {
34483448
if (state == st_idle && !test_bit(MD_RECOVERY_INTR, &recovery))
3449-
r = mddev->recovery_cp;
3449+
r = mddev->resync_offset;
34503450
else
34513451
r = mddev->curr_resync_completed;
34523452

@@ -4074,9 +4074,9 @@ static int raid_preresume(struct dm_target *ti)
40744074
}
40754075

40764076
/* Check for any resize/reshape on @rs and adjust/initiate */
4077-
if (mddev->recovery_cp && mddev->recovery_cp < MaxSector) {
4077+
if (mddev->resync_offset && mddev->resync_offset < MaxSector) {
40784078
set_bit(MD_RECOVERY_REQUESTED, &mddev->recovery);
4079-
mddev->resync_min = mddev->recovery_cp;
4079+
mddev->resync_min = mddev->resync_offset;
40804080
if (test_bit(RT_FLAG_RS_GROW, &rs->runtime_flags))
40814081
mddev->resync_max_sectors = mddev->dev_sectors;
40824082
}

drivers/md/md-bitmap.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1987,12 +1987,12 @@ static void bitmap_dirty_bits(struct mddev *mddev, unsigned long s,
19871987

19881988
md_bitmap_set_memory_bits(bitmap, sec, 1);
19891989
md_bitmap_file_set_bit(bitmap, sec);
1990-
if (sec < bitmap->mddev->recovery_cp)
1990+
if (sec < bitmap->mddev->resync_offset)
19911991
/* We are asserting that the array is dirty,
1992-
* so move the recovery_cp address back so
1992+
* so move the resync_offset address back so
19931993
* that it is obvious that it is dirty
19941994
*/
1995-
bitmap->mddev->recovery_cp = sec;
1995+
bitmap->mddev->resync_offset = sec;
19961996
}
19971997
}
19981998

@@ -2258,7 +2258,7 @@ static int bitmap_load(struct mddev *mddev)
22582258
|| bitmap->events_cleared == mddev->events)
22592259
/* no need to keep dirty bits to optimise a
22602260
* re-add of a missing device */
2261-
start = mddev->recovery_cp;
2261+
start = mddev->resync_offset;
22622262

22632263
mutex_lock(&mddev->bitmap_info.mutex);
22642264
err = md_bitmap_init_from_disk(bitmap, start);

drivers/md/md-cluster.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -337,11 +337,11 @@ static void recover_bitmaps(struct md_thread *thread)
337337
md_wakeup_thread(mddev->sync_thread);
338338

339339
if (hi > 0) {
340-
if (lo < mddev->recovery_cp)
341-
mddev->recovery_cp = lo;
340+
if (lo < mddev->resync_offset)
341+
mddev->resync_offset = lo;
342342
/* wake up thread to continue resync in case resync
343343
* is not finished */
344-
if (mddev->recovery_cp != MaxSector) {
344+
if (mddev->resync_offset != MaxSector) {
345345
/*
346346
* clear the REMOTE flag since we will launch
347347
* resync thread in current node.
@@ -863,9 +863,9 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots)
863863
lockres_free(bm_lockres);
864864
continue;
865865
}
866-
if ((hi > 0) && (lo < mddev->recovery_cp)) {
866+
if ((hi > 0) && (lo < mddev->resync_offset)) {
867867
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
868-
mddev->recovery_cp = lo;
868+
mddev->resync_offset = lo;
869869
md_check_recovery(mddev);
870870
}
871871

@@ -1027,7 +1027,7 @@ static int leave(struct mddev *mddev)
10271027
* Also, we should send BITMAP_NEEDS_SYNC message in
10281028
* case reshaping is interrupted.
10291029
*/
1030-
if ((cinfo->slot_number > 0 && mddev->recovery_cp != MaxSector) ||
1030+
if ((cinfo->slot_number > 0 && mddev->resync_offset != MaxSector) ||
10311031
(mddev->reshape_position != MaxSector &&
10321032
test_bit(MD_CLOSING, &mddev->flags)))
10331033
resync_bitmap(mddev);
@@ -1605,8 +1605,8 @@ static int gather_bitmaps(struct md_rdev *rdev)
16051605
pr_warn("md-cluster: Could not gather bitmaps from slot %d", sn);
16061606
goto out;
16071607
}
1608-
if ((hi > 0) && (lo < mddev->recovery_cp))
1609-
mddev->recovery_cp = lo;
1608+
if ((hi > 0) && (lo < mddev->resync_offset))
1609+
mddev->resync_offset = lo;
16101610
}
16111611
out:
16121612
return err;

0 commit comments

Comments
 (0)