|
@@ -1818,8 +1818,14 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
|
|
|
|
|
|
if (atomic_dec_and_test(&r1_bio->remaining)) {
|
|
|
/* if we're here, all write(s) have completed, so clean up */
|
|
|
- md_done_sync(mddev, r1_bio->sectors, 1);
|
|
|
- put_buf(r1_bio);
|
|
|
+ int s = r1_bio->sectors;
|
|
|
+ if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
|
|
|
+ test_bit(R1BIO_WriteError, &r1_bio->state))
|
|
|
+ reschedule_retry(r1_bio);
|
|
|
+ else {
|
|
|
+ put_buf(r1_bio);
|
|
|
+ md_done_sync(mddev, s, 1);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|