]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Dec 2020 14:52:13 +0000 (15:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Dec 2020 14:52:13 +0000 (15:52 +0100)
added patches:
dm-raid-fix-discard-limits-for-raid1-and-raid10.patch
md-change-mddev-chunk_sectors-from-int-to-unsigned.patch

queue-5.9/dm-raid-fix-discard-limits-for-raid1-and-raid10.patch [new file with mode: 0644]
queue-5.9/md-change-mddev-chunk_sectors-from-int-to-unsigned.patch [new file with mode: 0644]
queue-5.9/series

diff --git a/queue-5.9/dm-raid-fix-discard-limits-for-raid1-and-raid10.patch b/queue-5.9/dm-raid-fix-discard-limits-for-raid1-and-raid10.patch
new file mode 100644 (file)
index 0000000..32659f0
--- /dev/null
@@ -0,0 +1,54 @@
+From e0910c8e4f87bb9f767e61a778b0d9271c4dc512 Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+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>
+
+commit e0910c8e4f87bb9f767e61a778b0d9271c4dc512 upstream.
+
+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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/dm-raid.c |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/drivers/md/dm-raid.c
++++ b/drivers/md/dm-raid.c
+@@ -3730,12 +3730,14 @@ static void raid_io_hints(struct dm_targ
+       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);
+       }
+ }
diff --git a/queue-5.9/md-change-mddev-chunk_sectors-from-int-to-unsigned.patch b/queue-5.9/md-change-mddev-chunk_sectors-from-int-to-unsigned.patch
new file mode 100644 (file)
index 0000000..e1c0065
--- /dev/null
@@ -0,0 +1,83 @@
+From 6ffeb1c3f8226244c08105bcdbeecc04bad6b89a Mon Sep 17 00:00:00 2001
+From: Mike Snitzer <snitzer@redhat.com>
+Date: Sat, 12 Dec 2020 11:55:37 -0500
+Subject: md: change mddev 'chunk_sectors' from int to unsigned
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Mike Snitzer <snitzer@redhat.com>
+
+commit 6ffeb1c3f8226244c08105bcdbeecc04bad6b89a upstream.
+
+Commit e2782f560c29 ("Revert "dm raid: remove unnecessary discard
+limits for raid10"") exposed compiler warnings introduced by commit
+e0910c8e4f87 ("dm raid: fix discard limits for raid1 and raid10"):
+
+In file included from ./include/linux/kernel.h:14,
+                 from ./include/asm-generic/bug.h:20,
+                 from ./arch/x86/include/asm/bug.h:93,
+                 from ./include/linux/bug.h:5,
+                 from ./include/linux/mmdebug.h:5,
+                 from ./include/linux/gfp.h:5,
+                 from ./include/linux/slab.h:15,
+                 from drivers/md/dm-raid.c:8:
+drivers/md/dm-raid.c: In function ‘raid_io_hints’:
+./include/linux/minmax.h:18:28: warning: comparison of distinct pointer types lacks a cast
+  (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
+                            ^~
+./include/linux/minmax.h:32:4: note: in expansion of macro ‘__typecheck’
+   (__typecheck(x, y) && __no_side_effects(x, y))
+    ^~~~~~~~~~~
+./include/linux/minmax.h:42:24: note: in expansion of macro ‘__safe_cmp’
+  __builtin_choose_expr(__safe_cmp(x, y), \
+                        ^~~~~~~~~~
+./include/linux/minmax.h:51:19: note: in expansion of macro ‘__careful_cmp’
+ #define min(x, y) __careful_cmp(x, y, <)
+                   ^~~~~~~~~~~~~
+./include/linux/minmax.h:84:39: note: in expansion of macro ‘min’
+  __x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); })
+                                       ^~~
+drivers/md/dm-raid.c:3739:33: note: in expansion of macro ‘min_not_zero’
+   limits->max_discard_sectors = min_not_zero(rs->md.chunk_sectors,
+                                 ^~~~~~~~~~~~
+
+Fix this by changing the chunk_sectors member of 'struct mddev' from
+int to 'unsigned int' to match the type used for the 'chunk_sectors'
+member of 'struct queue_limits'.  Various MD code still uses 'int' but
+none of it appears to ever make use of signed int; and storing
+positive signed int in unsigned is perfectly safe.
+
+Reported-by: Song Liu <songliubraving@fb.com>
+Fixes: e2782f560c29 ("Revert "dm raid: remove unnecessary discard limits for raid10"")
+Fixes: e0910c8e4f87 ("dm raid: fix discard limits for raid1 and raid10")
+Cc: stable@vger,kernel.org # e0910c8e4f87 was marked for stable@
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Reviewed-by: Song Liu <song@kernel.org>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/md.h |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/md/md.h
++++ b/drivers/md/md.h
+@@ -311,7 +311,7 @@ struct mddev {
+       int                             external;       /* metadata is
+                                                        * managed externally */
+       char                            metadata_type[17]; /* externally set*/
+-      int                             chunk_sectors;
++      unsigned int                    chunk_sectors;
+       time64_t                        ctime, utime;
+       int                             level, layout;
+       char                            clevel[16];
+@@ -339,7 +339,7 @@ struct mddev {
+        */
+       sector_t                        reshape_position;
+       int                             delta_disks, new_level, new_layout;
+-      int                             new_chunk_sectors;
++      unsigned int                    new_chunk_sectors;
+       int                             reshape_backwards;
+       struct md_thread                *thread;        /* management thread */
index 38cd5d1338d5a4a7829184f7efd6b64a2c341205..b79e790010a21d89fe550a7a9db1671ad5955fa7 100644 (file)
@@ -102,3 +102,5 @@ x86-mm-mem_encrypt-fix-definition-of-pmd_flags_dec_wp.patch
 x86-membarrier-get-rid-of-a-dubious-optimization.patch
 x86-apic-vector-fix-ordering-in-vector-assignment.patch
 x86-kprobes-fix-optprobe-to-detect-int3-padding-correctly.patch
+dm-raid-fix-discard-limits-for-raid1-and-raid10.patch
+md-change-mddev-chunk_sectors-from-int-to-unsigned.patch