+++ /dev/null
-From 3ab5d0d953229c59c52f8ed94bc9b1a85c5bcf6b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 24 Sep 2020 13:14:52 -0400
-Subject: dm raid: fix discard limits for raid1 and raid10
-
-From: Mike Snitzer <snitzer@redhat.com>
-
-[ Upstream commit e0910c8e4f87bb9f767e61a778b0d9271c4dc512 ]
-
-Block core warned that discard_granularity was 0 for dm-raid with
-personality of raid1. Reason is that raid_io_hints() was incorrectly
-special-casing raid1 rather than raid0.
-
-But since commit 29efc390b9462 ("md/md0: optimize raid0 discard
-handling") even raid0 properly handles large discards.
-
-Fix raid_io_hints() by removing discard limits settings for raid1.
-Also, fix limits for raid10 by properly stacking underlying limits as
-done in blk_stack_limits().
-
-Depends-on: 29efc390b9462 ("md/md0: optimize raid0 discard handling")
-Fixes: 61697a6abd24a ("dm: eliminate 'split_discard_bios' flag from DM target interface")
-Cc: stable@vger.kernel.org
-Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
-Reported-by: Mikulas Patocka <mpatocka@redhat.com>
-Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/md/dm-raid.c | 12 +++++++-----
- 1 file changed, 7 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
-index b0aa595e4375d..2f41e38e06475 100644
---- a/drivers/md/dm-raid.c
-+++ b/drivers/md/dm-raid.c
-@@ -3744,12 +3744,14 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
- blk_limits_io_opt(limits, chunk_size_bytes * mddev_data_stripes(rs));
-
- /*
-- * RAID1 and RAID10 personalities require bio splitting,
-- * RAID0/4/5/6 don't and process large discard bios properly.
-+ * RAID10 personality requires bio splitting,
-+ * RAID0/1/4/5/6 don't and process large discard bios properly.
- */
-- if (rs_is_raid1(rs) || rs_is_raid10(rs)) {
-- limits->discard_granularity = chunk_size_bytes;
-- limits->max_discard_sectors = rs->md.chunk_sectors;
-+ if (rs_is_raid10(rs)) {
-+ limits->discard_granularity = max(chunk_size_bytes,
-+ limits->discard_granularity);
-+ limits->max_discard_sectors = min_not_zero(rs->md.chunk_sectors,
-+ limits->max_discard_sectors);
- }
- }
-
---
-2.27.0
-