diff options
author | NeilBrown <neilb@suse.de> | 2013-04-24 11:42:40 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-04-24 11:42:40 +1000 |
commit | d87f064f5874ba60814c6ccac67104761be5b26c (patch) | |
tree | bbc599fc78742a23dc62e3414e00db649a1d697e /drivers/md/md.c | |
parent | 824282ca7d250bd7c301f221c3cd902ce906d731 (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.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index aeceedfc530b..c6e44a836a53 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) { |