md: never update metadata when array is read-only.
authorNeilBrown <neilb@suse.de>
Wed, 24 Apr 2013 01:42:40 +0000 (11:42 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 24 Apr 2013 01:42:40 +0000 (11:42 +1000)
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>
drivers/md/md.c

index aeceedfc530b90b5da5b45e12ffdc9e4d665e16d..c6e44a836a53a5f10702d5e42ad0ba1a87622831 100644 (file)
@@ -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) {