diff options
author | Yufen Yu <yuyufen@huawei.com> | 2019-07-19 13:48:47 +0800 |
---|---|---|
committer | Song Liu <songliubraving@fb.com> | 2019-08-07 10:25:02 -0700 |
commit | 7cee6d4e6035603d42acd56d591e624921aa1b14 (patch) | |
tree | ecfb367b0882908aadd09c1b63847055c628fc29 /drivers/md | |
parent | eeba6809d8d58908b5ed1b5ceb5fcb09a98a7cad (diff) | |
download | linux-7cee6d4e6035603d42acd56d591e624921aa1b14.tar.gz linux-7cee6d4e6035603d42acd56d591e624921aa1b14.tar.bz2 linux-7cee6d4e6035603d42acd56d591e624921aa1b14.zip |
md/raid10: end bio when the device faulty
Just like raid1, we do not queue write error bio to retry write
and acknowlege badblocks, when the device is faulty.
Signed-off-by: Yufen Yu <yuyufen@huawei.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/raid10.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 8a1354a08a1a..a982e040b609 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -465,19 +465,21 @@ static void raid10_end_write_request(struct bio *bio) if (test_bit(FailFast, &rdev->flags) && (bio->bi_opf & MD_FAILFAST)) { md_error(rdev->mddev, rdev); - if (!test_bit(Faulty, &rdev->flags)) - /* This is the only remaining device, - * We need to retry the write without - * FailFast - */ - set_bit(R10BIO_WriteError, &r10_bio->state); - else { - r10_bio->devs[slot].bio = NULL; - to_put = bio; - dec_rdev = 1; - } - } else + } + + /* + * When the device is faulty, it is not necessary to + * handle write error. + * For failfast, this is the only remaining device, + * We need to retry the write without FailFast. + */ + if (!test_bit(Faulty, &rdev->flags)) set_bit(R10BIO_WriteError, &r10_bio->state); + else { + r10_bio->devs[slot].bio = NULL; + to_put = bio; + dec_rdev = 1; + } } } else { /* |