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;