From 7dde2ad3c5b4afb4b2544b864fa34dd1f4897ab6 Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Thu, 8 Oct 2015 21:54:10 -0700 Subject: [PATCH] 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 Signed-off-by: NeilBrown --- drivers/md/raid5-cache.c | 3 ++- drivers/md/raid5.c | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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) bool r5l_log_disk_error(struct r5conf *conf) { + /* don't allow write if journal disk is missing */ if (!conf->log) - return false; + return test_bit(MD_HAS_JOURNAL, &conf->mddev->flags); return test_bit(Faulty, &conf->log->rdev->flags); } 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) if (IS_ERR(conf)) return PTR_ERR(conf); + if (test_bit(MD_HAS_JOURNAL, &mddev->flags) && !journal_dev) { + printk(KERN_ERR "md/raid:%s: journal disk is missing, force array readonly\n", + mdname(mddev)); + mddev->ro = 1; + set_disk_ro(mddev->gendisk, 1); + } + conf->min_offset_diff = min_offset_diff; mddev->thread = conf->thread; conf->thread = NULL; -- 2.34.1