From: NeilBrown <neilb@suse.com>
To: Shaohua Li <shli@kernel.org>
Cc: Song Liu <songliubraving@fb.com>,
linux-raid <linux-raid@vger.kernel.org>,
"kumba@gentoo.org" <kumba@gentoo.org>, Shaohua Li <shli@fb.com>
Subject: [PATCH] md: forbid a RAID5 from having both a bitmap and a journal.
Date: Tue, 17 Oct 2017 14:24:09 +1100 [thread overview]
Message-ID: <87sheijw2u.fsf@notabene.neil.brown.name> (raw)
In-Reply-To: <20171016235609.mmo3vbqiekr4li5c@kernel.org>
[-- Attachment #1: Type: text/plain, Size: 2380 bytes --]
Having both a bitmap and a journal is pointless.
Attempting to do so can corrupt the bitmap if the journal
replay happens before the bitmap is initialized.
Rather than try to avoid this corruption, simply
refuse to allow arrays with both a bitmap and a journal.
So:
- if raid5_run sees both are present, fail.
- if adding a bitmap finds a journal is present, fail
- if adding a journal finds a bitmap is present, fail.
Cc: stable@vger.kernel.org (4.10+)
Signed-off-by: NeilBrown <neilb@suse.com>
---
This patch should replace 8031c3ddc70ab, which should be reverted.
Thanks,
NeilBrown
drivers/md/bitmap.c | 6 ++++++
drivers/md/md.c | 2 +-
drivers/md/raid5.c | 7 +++++++
3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index cae57b5be817..f425905c97fa 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -1816,6 +1816,12 @@ struct bitmap *bitmap_create(struct mddev *mddev, int slot)
BUG_ON(file && mddev->bitmap_info.offset);
+ if (test_bit(MD_HAS_JOURNAL, &mddev->flags)) {
+ pr_notice("md/raid:%s: array with journal cannot have bitmap\n",
+ mdname(mddev));
+ return ERR_PTR(-EBUSY);
+ }
+
bitmap = kzalloc(sizeof(*bitmap), GFP_KERNEL);
if (!bitmap)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 63ecfb063b76..bf06ff017eda 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6384,7 +6384,7 @@ static int add_new_disk(struct mddev *mddev, mdu_disk_info_t *info)
break;
}
}
- if (has_journal) {
+ if (has_journal || mddev->bitmap) {
export_rdev(rdev);
return -EBUSY;
}
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 4f40ccd21cbb..e070e5c68801 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -7134,6 +7134,13 @@ static int raid5_run(struct mddev *mddev)
min_offset_diff = diff;
}
+ if ((test_bit(MD_HAS_JOURNAL, &mddev->flags) || journal_dev) &&
+ (mddev->bitmap_info.offset || mddev->bitmap_info.file)) {
+ pr_notice("md/raid:%s: array cannot have both journal and bitmap\n",
+ mdname(mddev));
+ return -EINVAL;
+ }
+
if (mddev->reshape_position != MaxSector) {
/* Check that we can continue the reshape.
* Difficulties arise if the stripe we would write to
--
2.14.0.rc0.dirty
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
next prev parent reply other threads:[~2017-10-17 3:24 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-10 21:20 [PATCH] md/bitmap: avoid read out of the disk Shaohua Li
2017-10-11 12:41 ` Joshua Kinard
2017-10-12 3:09 ` NeilBrown
2017-10-12 17:30 ` Shaohua Li
2017-10-12 17:53 ` Song Liu
2017-10-12 21:46 ` NeilBrown
2017-10-12 22:51 ` Shaohua Li
2017-10-13 5:16 ` NeilBrown
2017-10-13 19:51 ` Shaohua Li
2017-10-16 16:21 ` Song Liu
2017-10-16 21:15 ` NeilBrown
2017-10-16 23:56 ` Shaohua Li
2017-10-17 3:24 ` NeilBrown [this message]
2017-10-17 20:41 ` [PATCH] md: forbid a RAID5 from having both a bitmap and a journal John Stoffel
2017-10-17 21:03 ` NeilBrown
2017-10-18 1:51 ` Joshua Kinard
2017-10-19 23:16 ` Wols Lists
2017-10-18 14:48 ` John Stoffel
2017-10-19 23:21 ` Wols Lists
2017-10-18 1:50 ` Joshua Kinard
2017-10-19 3:16 ` Shaohua Li
2017-10-12 21:44 ` [PATCH] md/bitmap: avoid read out of the disk NeilBrown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sheijw2u.fsf@notabene.neil.brown.name \
--to=neilb@suse.com \
--cc=kumba@gentoo.org \
--cc=linux-raid@vger.kernel.org \
--cc=shli@fb.com \
--cc=shli@kernel.org \
--cc=songliubraving@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).