Using r1_bio->sector in call_bio_endio is more obviously-correct than bio->bi_iter.bi_sector, though both should have the same value. The inc_pending() call in handle_read_error() was missing. One should always accompany a bio_inc_remaining. Signed-off-by: NeilBrown <neilb@xxxxxxxx> --- Sorry, I left an unused variable... NeilBrown drivers/md/raid1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index e566407b196f..2e2043cdcbf2 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -247,7 +247,6 @@ static void call_bio_endio(struct r1bio *r1_bio) { struct bio *bio = r1_bio->master_bio; struct r1conf *conf = r1_bio->mddev->private; - sector_t bi_sector = bio->bi_iter.bi_sector; if (!test_bit(R1BIO_Uptodate, &r1_bio->state)) bio->bi_error = -EIO; @@ -257,7 +256,7 @@ static void call_bio_endio(struct r1bio *r1_bio) * Wake up any possible resync thread that waits for the device * to go idle. */ - allow_barrier(conf, bi_sector); + allow_barrier(conf, r1_bio->sector); } static void raid_end_bio_io(struct r1bio *r1_bio) @@ -2543,6 +2542,7 @@ static void handle_read_error(struct r1conf *conf, struct r1bio *r1_bio) r1_bio = alloc_r1bio(mddev, mbio, sectors_handled); set_bit(R1BIO_ReadError, &r1_bio->state); + inc_pending(conf, r1_bio->sector); goto read_more; } else { -- 2.12.0
Attachment:
signature.asc
Description: PGP signature