From: NeilBrown Date: Wed, 24 Apr 2013 01:42:40 +0000 (+1000) Subject: md: never update metadata when array is read-only. X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=d87f064f5874ba60814c6ccac67104761be5b26c;p=openwrt%2Fstaging%2Fblogic.git 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 --- 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) {