FAILED: patch "[PATCH] md: forbid a RAID5 from having both a bitmap and a journal." failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
230b55fa8d64007339319539f8f8e68114d08529Mon Sep 17 00:00:00 2001
From: NeilBrown <[email protected]>
Date: Tue, 17 Oct 2017 14:24:09 +1100
Subject: [PATCH] md: forbid a RAID5 from having both a bitmap and a journal.
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.
drivers/md/md-bitmap.c +6 -0
@@ -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 );
drivers/md/md.c +1 -1
@@ -6362,7 +6362,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 ; }
drivers/md/raid5.c +7 -0
@@ -7159,6 +7159,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
Subject: [PATCH] md: forbid a RAID5 from having both a bitmap and a journal.
commit 230b55fa8d64007339319539f8f8e68114d08529 upstream.
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.
--- drivers/md/bitmap.c | 6 ++++++ drivers/md/md.c | 2 +- drivers/md/raid5.c | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-)
This commit only had problems due to a filename change.
drivers/md/bitmap.c +0 -0
index d2121637b4ab..90231c7a6791 100644
drivers/md/bitmap.c +6 -0
@@ -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 );
drivers/md/md.c +1 -1
@@ -6362,7 +6362,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 ; }
drivers/md/raid5.c +7 -0
@@ -7156,6 +7156,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
Signature · 1 line
2.14.0.rc0.dirty
Greg KH
maintainerQuoted 20 lines · NeilBrown
Subject: [PATCH] md: forbid a RAID5 from having both a bitmap and a journal.
commit
230b55fa8d64007339319539f8f8e68114d08529upstream.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:
- ifraid5_runsees 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 [email protected] (4.10+)Signed-off-by NeilBrown <[email protected]>Tested-by Joshua Kinard <[email protected]>Acked-by Joshua Kinard <[email protected]>Signed-off-by Shaohua Li <[email protected]>
Quoted 7 lines
--- drivers/md/bitmap.c | 6 ++++++ drivers/md/md.c | 2 +- drivers/md/raid5.c | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-)This commit only had problems due to a filename change.
Oops, I should have caught that one, sorry about that. Thanks for the patch.
greg k-h