Merge tag 'for-5.11/block-2020-12-14' of git://git.kernel.dk/linux-block
[platform/kernel/linux-starfive.git] / drivers / md / dm-raid.c
index 294f34d..23c3877 100644 (file)
@@ -3727,6 +3727,15 @@ static void raid_io_hints(struct dm_target *ti, struct queue_limits *limits)
 
        blk_limits_io_min(limits, chunk_size_bytes);
        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.
+        */
+       if (rs_is_raid1(rs) || rs_is_raid10(rs)) {
+               limits->discard_granularity = chunk_size_bytes;
+               limits->max_discard_sectors = rs->md.chunk_sectors;
+       }
 }
 
 static void raid_postsuspend(struct dm_target *ti)