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> --- drivers/md/raid1.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index e566407b196f..bea7f149c43c 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -257,7 +257,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 +2543,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