From: NeilBrown <neilb@suse.de>
Date: Wed, 30 Dec 2009 01:08:50 +0000 (+1100)
Subject: md: fix small irregularity with start_ro module parameter
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=0f9552b5dc4fe10da37fa3f4a4ca185d90fa41c9;p=linux.git

md: fix small irregularity with start_ro module parameter

The start_ro modules parameter can be used to force arrays to be
started in 'auto-readonly' in which they are read-only until the first
write.  This ensures that no resync/recovery happens until something
else writes to the device.  This is important for resume-from-disk
off an md array.

However if an array is started 'readonly' (by writing 'readonly' to
the 'array_state' sysfs attribute) we want it to be really 'readonly',
not 'auto-readonly'.

So strengthen the condition to only set auto-readonly if the
array is not already read-only.

Signed-off-by: NeilBrown <neilb@suse.de>
---

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 7862231a07506..d2aff72090709 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -4357,7 +4357,7 @@ static int do_md_run(mddev_t * mddev)
 	mddev->barriers_work = 1;
 	mddev->ok_start_degraded = start_dirty_degraded;
 
-	if (start_readonly)
+	if (start_readonly && mddev->ro == 0)
 		mddev->ro = 2; /* read-only, but switch on first write */
 
 	err = mddev->pers->run(mddev);