aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2015-10-09 00:54:10 -0400
committerNeilBrown <neilb@suse.com>2015-10-31 22:48:29 -0400
commit7dde2ad3c5b4afb4b2544b864fa34dd1f4897ab6 (patch)
tree301d84d8773e13a6b815355446b485ed3dcfc595
parenta97b7896447a89749d9258fbb9d8c3faf48a7a4e (diff)
raid5-cache: start raid5 readonly if journal is missing
If raid array is expected to have journal (eg, journal is set in MD superblock feature map) and the array is started without journal disk, start the array readonly. Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: NeilBrown <neilb@suse.com>
-rw-r--r--drivers/md/raid5-cache.c3
-rw-r--r--drivers/md/raid5.c7
2 files changed, 9 insertions, 1 deletions
diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
index 62e5fe4afae8..b887e04d7e5c 100644
--- a/drivers/md/raid5-cache.c
+++ b/drivers/md/raid5-cache.c
@@ -806,8 +806,9 @@ void r5l_quiesce(struct r5l_log *log, int state)
806 806
807bool r5l_log_disk_error(struct r5conf *conf) 807bool r5l_log_disk_error(struct r5conf *conf)
808{ 808{
809 /* don't allow write if journal disk is missing */
809 if (!conf->log) 810 if (!conf->log)
810 return false; 811 return test_bit(MD_HAS_JOURNAL, &conf->mddev->flags);
811 return test_bit(Faulty, &conf->log->rdev->flags); 812 return test_bit(Faulty, &conf->log->rdev->flags);
812} 813}
813 814
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 68c36ce4fe8e..e1d18be67243 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -6810,6 +6810,13 @@ static int run(struct mddev *mddev)
6810 if (IS_ERR(conf)) 6810 if (IS_ERR(conf))
6811 return PTR_ERR(conf); 6811 return PTR_ERR(conf);
6812 6812
6813 if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && !journal_dev) {
6814 printk(KERN_ERR "md/raid:%s: journal disk is missing, force array readonly\n",
6815 mdname(mddev));
6816 mddev->ro = 1;
6817 set_disk_ro(mddev->gendisk, 1);
6818 }
6819
6813 conf->min_offset_diff = min_offset_diff; 6820 conf->min_offset_diff = min_offset_diff;
6814 mddev->thread = conf->thread; 6821 mddev->thread = conf->thread;
6815 conf->thread = NULL; 6822 conf->thread = NULL;