diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-06-22 04:17:23 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-22 06:07:46 +0400 |
commit | ab7a30c7051ee32d0d72415fe0a16d60eba38a0d (patch) | |
tree | ab053c3d097e9ef7d2448944b8a20c8b0b8117a4 /drivers/md | |
parent | 191ea9b2c7cc3ebbe0678834ab710d7d95ad3f9a (diff) | |
download | linux-ab7a30c7051ee32d0d72415fe0a16d60eba38a0d.tar.xz |
[PATCH] md: fix bug when raid1 attempts a partial reconstruct.
The logic here is wrong. if fullsync is 0, it WILL BUG.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/raid1.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 0fd4c3bfc851..9d9acc3e51a7 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1237,13 +1237,16 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i len = (max_sector - sector_nr) << 9; if (len == 0) break; - if (!conf->fullsync && sync_blocks == 0) - if (!bitmap_start_sync(mddev->bitmap, - sector_nr, &sync_blocks)) - break; - if (sync_blocks < (PAGE_SIZE>>9)) - BUG(); - if (len > (sync_blocks<<9)) len = sync_blocks<<9; + if (!conf->fullsync) { + if (sync_blocks == 0) { + if (!bitmap_start_sync(mddev->bitmap, + sector_nr, &sync_blocks)) + break; + if (sync_blocks < (PAGE_SIZE>>9)) + BUG(); + if (len > (sync_blocks<<9)) len = sync_blocks<<9; + } + } for (i=0 ; i < conf->raid_disks; i++) { bio = r1_bio->bios[i]; |