aboutsummaryrefslogtreecommitdiff
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-04-24 11:42:40 +1000
committerNeilBrown <neilb@suse.de>2013-04-24 11:42:40 +1000
commitd87f064f5874ba60814c6ccac67104761be5b26c (patch)
treebbc599fc78742a23dc62e3414e00db649a1d697e /drivers/md/md.c
parent824282ca7d250bd7c301f221c3cd902ce906d731 (diff)
md: never update metadata when array is read-only.
Normally we don't even try to update the metadata if the array is read-only. However future patches will increase the number of things that can happen on a read-only array, so it is safest to explicitly disable this. Every time that mddev->ro is set to 0, either - md_update_sb will be called again (at least if MD_CHANGE_DEVS is set) or - the mddev->thread is scheduled, which will also run md_update_sb if needed. So this is safe: if the array ever become read-write the metadata will be updated. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index aeceedfc530..c6e44a836a5 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2411,6 +2411,11 @@ static void md_update_sb(struct mddev * mddev, int force_change)
int nospares = 0;
int any_badblocks_changed = 0;
+ if (mddev->ro) {
+ if (force_change)
+ set_bit(MD_CHANGE_DEVS, &mddev->flags);
+ return;
+ }
repeat:
/* First make sure individual recovery_offsets are correct */
rdev_for_each(rdev, mddev) {