mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
md: factor error handling out of md_done_sync into helper
The 'ok' parameter in md_done_sync() is redundant for most callers that always pass 'true'. Factor error handling logic into a separate helper function md_sync_error() to eliminate unnecessary parameter passing and improve code clarity. No functional changes introduced. Link: https://lore.kernel.org/linux-raid/20260105110300.1442509-3-linan666@huaweicloud.com Signed-off-by: Li Nan <linan122@huawei.com> Reviewed-by: Yu Kuai <yukuai3@huawei.com> Signed-off-by: Yu Kuai <yukuai@fnnas.com>
This commit is contained in:
parent
090856dd85
commit
2a5d4549a2
|
|
@ -9074,20 +9074,23 @@ static bool is_mddev_idle(struct mddev *mddev, int init)
|
|||
return idle;
|
||||
}
|
||||
|
||||
void md_done_sync(struct mddev *mddev, int blocks, int ok)
|
||||
void md_done_sync(struct mddev *mddev, int blocks)
|
||||
{
|
||||
/* another "blocks" (512byte) blocks have been synced */
|
||||
atomic_sub(blocks, &mddev->recovery_active);
|
||||
wake_up(&mddev->recovery_wait);
|
||||
if (!ok) {
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
set_bit(MD_RECOVERY_ERROR, &mddev->recovery);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
// stop recovery, signal do_sync ....
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(md_done_sync);
|
||||
|
||||
void md_sync_error(struct mddev *mddev)
|
||||
{
|
||||
// stop recovery, signal do_sync ....
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
set_bit(MD_RECOVERY_ERROR, &mddev->recovery);
|
||||
md_wakeup_thread(mddev->thread);
|
||||
}
|
||||
EXPORT_SYMBOL(md_sync_error);
|
||||
|
||||
/* md_write_start(mddev, bi)
|
||||
* If we need to update some array metadata (e.g. 'active' flag
|
||||
* in superblock) before writing, schedule a superblock update
|
||||
|
|
|
|||
|
|
@ -918,7 +918,8 @@ extern const char *md_sync_action_name(enum sync_action action);
|
|||
extern void md_write_start(struct mddev *mddev, struct bio *bi);
|
||||
extern void md_write_inc(struct mddev *mddev, struct bio *bi);
|
||||
extern void md_write_end(struct mddev *mddev);
|
||||
extern void md_done_sync(struct mddev *mddev, int blocks, int ok);
|
||||
extern void md_done_sync(struct mddev *mddev, int blocks);
|
||||
extern void md_sync_error(struct mddev *mddev);
|
||||
extern void md_error(struct mddev *mddev, struct md_rdev *rdev);
|
||||
extern void md_finish_reshape(struct mddev *mddev);
|
||||
void md_submit_discard_bio(struct mddev *mddev, struct md_rdev *rdev,
|
||||
|
|
|
|||
|
|
@ -2062,7 +2062,7 @@ static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio)
|
|||
} while (sectors_to_go > 0);
|
||||
}
|
||||
|
||||
static void put_sync_write_buf(struct r1bio *r1_bio, int uptodate)
|
||||
static void put_sync_write_buf(struct r1bio *r1_bio)
|
||||
{
|
||||
if (atomic_dec_and_test(&r1_bio->remaining)) {
|
||||
struct mddev *mddev = r1_bio->mddev;
|
||||
|
|
@ -2073,7 +2073,7 @@ static void put_sync_write_buf(struct r1bio *r1_bio, int uptodate)
|
|||
reschedule_retry(r1_bio);
|
||||
else {
|
||||
put_buf(r1_bio);
|
||||
md_done_sync(mddev, s, uptodate);
|
||||
md_done_sync(mddev, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2098,7 +2098,7 @@ static void end_sync_write(struct bio *bio)
|
|||
set_bit(R1BIO_MadeGood, &r1_bio->state);
|
||||
}
|
||||
|
||||
put_sync_write_buf(r1_bio, 1);
|
||||
put_sync_write_buf(r1_bio);
|
||||
}
|
||||
|
||||
static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
|
||||
|
|
@ -2348,8 +2348,8 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
|
|||
if (test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) ||
|
||||
!fix_sync_read_error(r1_bio)) {
|
||||
conf->recovery_disabled = mddev->recovery_disabled;
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
md_done_sync(mddev, r1_bio->sectors, 0);
|
||||
md_done_sync(mddev, r1_bio->sectors);
|
||||
md_sync_error(mddev);
|
||||
put_buf(r1_bio);
|
||||
return;
|
||||
}
|
||||
|
|
@ -2384,7 +2384,7 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
|
|||
submit_bio_noacct(wbio);
|
||||
}
|
||||
|
||||
put_sync_write_buf(r1_bio, 1);
|
||||
put_sync_write_buf(r1_bio);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -2575,7 +2575,7 @@ static void handle_sync_write_finished(struct r1conf *conf, struct r1bio *r1_bio
|
|||
}
|
||||
}
|
||||
put_buf(r1_bio);
|
||||
md_done_sync(conf->mddev, s, 1);
|
||||
md_done_sync(conf->mddev, s);
|
||||
}
|
||||
|
||||
static void handle_write_finished(struct r1conf *conf, struct r1bio *r1_bio)
|
||||
|
|
|
|||
|
|
@ -2276,7 +2276,7 @@ static void end_sync_request(struct r10bio *r10_bio)
|
|||
reschedule_retry(r10_bio);
|
||||
else
|
||||
put_buf(r10_bio);
|
||||
md_done_sync(mddev, s, 1);
|
||||
md_done_sync(mddev, s);
|
||||
break;
|
||||
} else {
|
||||
struct r10bio *r10_bio2 = (struct r10bio *)r10_bio->master_bio;
|
||||
|
|
@ -2452,7 +2452,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
|
||||
done:
|
||||
if (atomic_dec_and_test(&r10_bio->remaining)) {
|
||||
md_done_sync(mddev, r10_bio->sectors, 1);
|
||||
md_done_sync(mddev, r10_bio->sectors);
|
||||
put_buf(r10_bio);
|
||||
}
|
||||
}
|
||||
|
|
@ -3757,7 +3757,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
|||
/* pretend they weren't skipped, it makes
|
||||
* no important difference in this case
|
||||
*/
|
||||
md_done_sync(mddev, sectors_skipped, 1);
|
||||
md_done_sync(mddev, sectors_skipped);
|
||||
|
||||
return sectors_skipped + nr_sectors;
|
||||
giveup:
|
||||
|
|
@ -4913,7 +4913,8 @@ static void reshape_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
|||
if (!test_bit(R10BIO_Uptodate, &r10_bio->state))
|
||||
if (handle_reshape_read_error(mddev, r10_bio) < 0) {
|
||||
/* Reshape has been aborted */
|
||||
md_done_sync(mddev, r10_bio->sectors, 0);
|
||||
md_done_sync(mddev, r10_bio->sectors);
|
||||
md_sync_error(mddev);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -5071,7 +5072,7 @@ static void end_reshape_request(struct r10bio *r10_bio)
|
|||
{
|
||||
if (!atomic_dec_and_test(&r10_bio->remaining))
|
||||
return;
|
||||
md_done_sync(r10_bio->mddev, r10_bio->sectors, 1);
|
||||
md_done_sync(r10_bio->mddev, r10_bio->sectors);
|
||||
bio_put(r10_bio->master_bio);
|
||||
put_buf(r10_bio);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3727,11 +3727,13 @@ handle_failed_sync(struct r5conf *conf, struct stripe_head *sh,
|
|||
RAID5_STRIPE_SECTORS(conf), 0))
|
||||
abort = 1;
|
||||
}
|
||||
if (abort)
|
||||
conf->recovery_disabled =
|
||||
conf->mddev->recovery_disabled;
|
||||
}
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), !abort);
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf));
|
||||
|
||||
if (abort) {
|
||||
conf->recovery_disabled = conf->mddev->recovery_disabled;
|
||||
md_sync_error(conf->mddev);
|
||||
}
|
||||
}
|
||||
|
||||
static int want_replace(struct stripe_head *sh, int disk_idx)
|
||||
|
|
@ -5161,7 +5163,7 @@ static void handle_stripe(struct stripe_head *sh)
|
|||
if ((s.syncing || s.replacing) && s.locked == 0 &&
|
||||
!test_bit(STRIPE_COMPUTE_RUN, &sh->state) &&
|
||||
test_bit(STRIPE_INSYNC, &sh->state)) {
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1);
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf));
|
||||
clear_bit(STRIPE_SYNCING, &sh->state);
|
||||
if (test_and_clear_bit(R5_Overlap, &sh->dev[sh->pd_idx].flags))
|
||||
wake_up_bit(&sh->dev[sh->pd_idx].flags, R5_Overlap);
|
||||
|
|
@ -5228,7 +5230,7 @@ static void handle_stripe(struct stripe_head *sh)
|
|||
clear_bit(STRIPE_EXPAND_READY, &sh->state);
|
||||
atomic_dec(&conf->reshape_stripes);
|
||||
wake_up(&conf->wait_for_reshape);
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf), 1);
|
||||
md_done_sync(conf->mddev, RAID5_STRIPE_SECTORS(conf));
|
||||
}
|
||||
|
||||
if (s.expanding && s.locked == 0 &&
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user