From 76f55d939d26ab2335165f12445211526b15b118 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 30 Apr 2008 00:52:30 -0700 Subject: [PATCH] --- yaml --- r: 95097 b: refs/heads/master c: 648b629ed406233b0a607a3cf29d8a169876131f h: refs/heads/master i: 95095: 6de3f07be02317583b10e9a1c9517332838f51a5 v: v3 --- [refs] | 2 +- trunk/drivers/md/md.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index d88e77e228d1..9d1b9c80261c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 31a59e3425d32743738e043c1df1668e0f22bbab +refs/heads/master: 648b629ed406233b0a607a3cf29d8a169876131f diff --git a/trunk/drivers/md/md.c b/trunk/drivers/md/md.c index ff9fef389608..32b2ad88a2f9 100644 --- a/trunk/drivers/md/md.c +++ b/trunk/drivers/md/md.c @@ -2594,15 +2594,20 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len) err = do_md_stop(mddev, 1); else { mddev->ro = 1; + set_disk_ro(mddev->gendisk, 1); err = do_md_run(mddev); } break; case read_auto: - /* stopping an active array */ if (mddev->pers) { - err = do_md_stop(mddev, 1); - if (err == 0) - mddev->ro = 2; /* FIXME mark devices writable */ + if (mddev->ro != 1) + err = do_md_stop(mddev, 1); + else + err = restart_array(mddev); + if (err == 0) { + mddev->ro = 2; + set_disk_ro(mddev->gendisk, 0); + } } else { mddev->ro = 2; err = do_md_run(mddev); @@ -2640,6 +2645,7 @@ array_state_store(mddev_t *mddev, const char *buf, size_t len) err = 0; } else { mddev->ro = 0; + set_disk_ro(mddev->gendisk, 0); err = do_md_run(mddev); } break;