From 78dcb504323ae56819473700baad744ebe8b650f Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 31 Mar 2006 02:31:57 -0800 Subject: [PATCH] --- yaml --- r: 24939 b: refs/heads/master c: 6b1117d50543e2484bee037ec2589fe52492a7e7 h: refs/heads/master i: 24937: 5a16432a154d1aa374e8b43a4400be9a07b92baf 24935: 5b3aa403b88f1f9d0b8ca5839623dfa86d2911b9 v: v3 --- [refs] | 2 +- trunk/drivers/md/raid1.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 9a1ee44e2516..35c79063e8fc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 39451a73a2d190763ba8a98f486cf23d63d22582 +refs/heads/master: 6b1117d50543e2484bee037ec2589fe52492a7e7 diff --git a/trunk/drivers/md/raid1.c b/trunk/drivers/md/raid1.c index 3cb0872a845d..9b374c91db66 100644 --- a/trunk/drivers/md/raid1.c +++ b/trunk/drivers/md/raid1.c @@ -1135,8 +1135,19 @@ static int end_sync_write(struct bio *bio, unsigned int bytes_done, int error) mirror = i; break; } - if (!uptodate) + if (!uptodate) { + int sync_blocks = 0; + sector_t s = r1_bio->sector; + long sectors_to_go = r1_bio->sectors; + /* make sure these bits doesn't get cleared. */ + do { + bitmap_end_sync(mddev->bitmap, r1_bio->sector, + &sync_blocks, 1); + s += sync_blocks; + sectors_to_go -= sync_blocks; + } while (sectors_to_go > 0); md_error(mddev, conf->mirrors[mirror].rdev); + } update_head_pos(mirror, r1_bio);