From: Logan Gunthorpe Factor out a common raid1_write_error() helper from raid1.c and raid10.c. This will help reduce code duplication in subsequent patches. Signed-off-by: Logan Gunthorpe Signed-off-by: Mykola Marzhan --- drivers/md/raid1-10.c | 13 +++++++++++++ drivers/md/raid1.c | 13 ++----------- drivers/md/raid10.c | 10 +--------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c index 56a56a4da4f8..cee21452e066 100644 --- a/drivers/md/raid1-10.c +++ b/drivers/md/raid1-10.c @@ -303,3 +303,16 @@ static inline bool raid1_should_handle_error(struct bio *bio) return !(bio->bi_opf & (REQ_RAHEAD | REQ_NOWAIT)) && bio->bi_status != BLK_STS_INVAL; } + +static inline void raid1_write_error(struct mddev *mddev, struct md_rdev *rdev, + struct bio *bio, bool allow_failfast) +{ + set_bit(WriteErrorSeen, &rdev->flags); + + if (!test_and_set_bit(WantReplacement, &rdev->flags)) + set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); + + if (allow_failfast && test_bit(FailFast, &rdev->flags) && + (bio->bi_opf & MD_FAILFAST)) + md_error(mddev, rdev); +} diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 7d769b6460ca..f07edeac6e5a 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -483,17 +483,8 @@ static void raid1_end_write_request(struct bio *bio) * 'one mirror IO has finished' event handler: */ if (bio->bi_status && !ignore_error) { - set_bit(WriteErrorSeen, &rdev->flags); - if (!test_and_set_bit(WantReplacement, &rdev->flags)) - set_bit(MD_RECOVERY_NEEDED, & - conf->mddev->recovery); - - if (test_bit(FailFast, &rdev->flags) && - (bio->bi_opf & MD_FAILFAST) && - /* We never try FailFast to WriteMostly devices */ - !test_bit(WriteMostly, &rdev->flags)) { - md_error(r1_bio->mddev, rdev); - } + raid1_write_error(conf->mddev, rdev, bio, + !test_bit(WriteMostly, &rdev->flags)); /* * When the device is faulty, it is not necessary to diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 0a3cfdd3f5df..5b63175fb382 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -482,16 +482,8 @@ static void raid10_end_write_request(struct bio *bio) */ md_error(rdev->mddev, rdev); else { - set_bit(WriteErrorSeen, &rdev->flags); - if (!test_and_set_bit(WantReplacement, &rdev->flags)) - set_bit(MD_RECOVERY_NEEDED, - &rdev->mddev->recovery); - dec_rdev = 0; - if (test_bit(FailFast, &rdev->flags) && - (bio->bi_opf & MD_FAILFAST)) { - md_error(rdev->mddev, rdev); - } + raid1_write_error(rdev->mddev, rdev, bio, true); /* * When the device is faulty, it is not necessary to -- 2.52.0