aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 34846856dbc6..32fc19c540d4 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5599,7 +5599,7 @@ static int get_array_info(struct mddev * mddev, void __user * arg)
5599 if (mddev->in_sync) 5599 if (mddev->in_sync)
5600 info.state = (1<<MD_SB_CLEAN); 5600 info.state = (1<<MD_SB_CLEAN);
5601 if (mddev->bitmap && mddev->bitmap_info.offset) 5601 if (mddev->bitmap && mddev->bitmap_info.offset)
5602 info.state = (1<<MD_SB_BITMAP_PRESENT); 5602 info.state |= (1<<MD_SB_BITMAP_PRESENT);
5603 info.active_disks = insync; 5603 info.active_disks = insync;
5604 info.working_disks = working; 5604 info.working_disks = working;
5605 info.failed_disks = failed; 5605 info.failed_disks = failed;
@@ -7501,6 +7501,19 @@ void md_do_sync(struct md_thread *thread)
7501 rdev->recovery_offset < j) 7501 rdev->recovery_offset < j)
7502 j = rdev->recovery_offset; 7502 j = rdev->recovery_offset;
7503 rcu_read_unlock(); 7503 rcu_read_unlock();
7504
7505 /* If there is a bitmap, we need to make sure all
7506 * writes that started before we added a spare
7507 * complete before we start doing a recovery.
7508 * Otherwise the write might complete and (via
7509 * bitmap_endwrite) set a bit in the bitmap after the
7510 * recovery has checked that bit and skipped that
7511 * region.
7512 */
7513 if (mddev->bitmap) {
7514 mddev->pers->quiesce(mddev, 1);
7515 mddev->pers->quiesce(mddev, 0);
7516 }
7504 } 7517 }
7505 7518
7506 printk(KERN_INFO "md: %s of RAID array %s\n", desc, mdname(mddev)); 7519 printk(KERN_INFO "md: %s of RAID array %s\n", desc, mdname(mddev));