Skip to content

Commit bc49694

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md: pass in max_sectors for pers->sync_request()
For different sync_action, sync_thread will use different max_sectors, see details in md_sync_max_sectors(), currently both md_do_sync() and pers->sync_request() in eatch iteration have to get the same max_sectors. Hence pass in max_sectors for pers->sync_request() to prevent redundant code. Signed-off-by: Yu Kuai <[email protected]> Signed-off-by: Song Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent bbf2076 commit bc49694

File tree

5 files changed

+10
-14
lines changed

5 files changed

+10
-14
lines changed

drivers/md/md.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9186,7 +9186,8 @@ void md_do_sync(struct md_thread *thread)
91869186
if (test_bit(MD_RECOVERY_INTR, &mddev->recovery))
91879187
break;
91889188

9189-
sectors = mddev->pers->sync_request(mddev, j, &skipped);
9189+
sectors = mddev->pers->sync_request(mddev, j, max_sectors,
9190+
&skipped);
91909191
if (sectors == 0) {
91919192
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
91929193
break;
@@ -9276,7 +9277,7 @@ void md_do_sync(struct md_thread *thread)
92769277
mddev->curr_resync_completed = mddev->curr_resync;
92779278
sysfs_notify_dirent_safe(mddev->sysfs_completed);
92789279
}
9279-
mddev->pers->sync_request(mddev, max_sectors, &skipped);
9280+
mddev->pers->sync_request(mddev, max_sectors, max_sectors, &skipped);
92809281

92819282
if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) &&
92829283
mddev->curr_resync > MD_RESYNC_ACTIVE) {

drivers/md/md.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,8 @@ struct md_personality
729729
int (*hot_add_disk) (struct mddev *mddev, struct md_rdev *rdev);
730730
int (*hot_remove_disk) (struct mddev *mddev, struct md_rdev *rdev);
731731
int (*spare_active) (struct mddev *mddev);
732-
sector_t (*sync_request)(struct mddev *mddev, sector_t sector_nr, int *skipped);
732+
sector_t (*sync_request)(struct mddev *mddev, sector_t sector_nr,
733+
sector_t max_sector, int *skipped);
733734
int (*resize) (struct mddev *mddev, sector_t sectors);
734735
sector_t (*size) (struct mddev *mddev, sector_t sectors, int raid_disks);
735736
int (*check_reshape) (struct mddev *mddev);

drivers/md/raid1.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2756,12 +2756,12 @@ static struct r1bio *raid1_alloc_init_r1buf(struct r1conf *conf)
27562756
*/
27572757

27582758
static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
2759-
int *skipped)
2759+
sector_t max_sector, int *skipped)
27602760
{
27612761
struct r1conf *conf = mddev->private;
27622762
struct r1bio *r1_bio;
27632763
struct bio *bio;
2764-
sector_t max_sector, nr_sectors;
2764+
sector_t nr_sectors;
27652765
int disk = -1;
27662766
int i;
27672767
int wonly = -1;
@@ -2777,7 +2777,6 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
27772777
if (init_resync(conf))
27782778
return 0;
27792779

2780-
max_sector = mddev->dev_sectors;
27812780
if (sector_nr >= max_sector) {
27822781
/* If we aborted, we need to abort the
27832782
* sync on the 'current' bitmap chunk (there will

drivers/md/raid10.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3139,12 +3139,12 @@ static void raid10_set_cluster_sync_high(struct r10conf *conf)
31393139
*/
31403140

31413141
static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
3142-
int *skipped)
3142+
sector_t max_sector, int *skipped)
31433143
{
31443144
struct r10conf *conf = mddev->private;
31453145
struct r10bio *r10_bio;
31463146
struct bio *biolist = NULL, *bio;
3147-
sector_t max_sector, nr_sectors;
3147+
sector_t nr_sectors;
31483148
int i;
31493149
int max_sync;
31503150
sector_t sync_blocks;
@@ -3174,10 +3174,6 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
31743174
return 0;
31753175

31763176
skipped:
3177-
max_sector = mddev->dev_sectors;
3178-
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
3179-
test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
3180-
max_sector = mddev->resync_max_sectors;
31813177
if (sector_nr >= max_sector) {
31823178
conf->cluster_sync_low = 0;
31833179
conf->cluster_sync_high = 0;

drivers/md/raid5.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6457,11 +6457,10 @@ static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr, int *sk
64576457
}
64586458

64596459
static inline sector_t raid5_sync_request(struct mddev *mddev, sector_t sector_nr,
6460-
int *skipped)
6460+
sector_t max_sector, int *skipped)
64616461
{
64626462
struct r5conf *conf = mddev->private;
64636463
struct stripe_head *sh;
6464-
sector_t max_sector = mddev->dev_sectors;
64656464
sector_t sync_blocks;
64666465
int still_degraded = 0;
64676466
int i;

0 commit comments

Comments
 (0)