FAILED: patch "[PATCH] block: nr_sects_write(): Disable preemption on seqcount write" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-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 ------------------
From 15b81ce5abdc4b502aa31dff2d415b79d2349d2f Mon Sep 17 00:00:00 2001
From: "Ahmed S. Darwish" <[email protected]>
Date: Wed, 3 Jun 2020 16:49:48 +0200
Subject: [PATCH] block: nr_sects_write(): Disable preemption on seqcount write
For optimized block readers not holding a mutex, the "number of sectors" 64-bit value is protected from tearing on 32-bit architectures by a sequence counter.
Disable preemption before entering that sequence counter's write side critical section. Otherwise, the read side can preempt the write side section and spin for the entire scheduler tick. If the reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock.
block/blk.h +2 -0
@@ -420,9 +420,11 @@ static inline sector_t part_nr_sects_read(struct hd_struct *part)static inline void part_nr_sects_write (struct hd_struct *part,sector_t size) {#if BITS_PER_LONG ==32 && defined(CONFIG_SMP ) +preempt_disable ();write_seqcount_begin (&part->nr_sects_seq); part->nr_sects = size;write_seqcount_end (&part->nr_sects_seq); +preempt_enable ();#elif BITS_PER_LONG ==32 && defined(CONFIG_PREEMPTION )preempt_disable (); part->nr_sects = size;
Sasha Levin
maintainerQuoted 27 lines · On Fri, Jun 19, 2020 at 03:43:39PM +0200, [email protected] wrote:
The patch below does not apply to the 5.4-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 ------------------
From
15b81ce5abdc4b502aa31dff2d415b79d2349d2fMon Sep 17 00:00:00 2001
From: "Ahmed S. Darwish" <[email protected]>
Date: Wed, 3 Jun 2020 16:49:48 +0200
Subject: [PATCH] block:nr_sects_write(): Disable preemption on seqcount writeFor optimized block readers not holding a mutex, the "number of sectors" 64-bit value is protected from tearing on 32-bit architectures by a sequence counter.
Disable preemption before entering that sequence counter's write side critical section. Otherwise, the read side can preempt the write side section and spin for the entire scheduler tick. If the reader belongs to a real-time scheduling class, it can spin forever and the kernel will livelock.
Quoted 5 lines
Fixes c83f6bf98dc1 ("block: add partition resize function to blkpg ioctl")Cc <[email protected]>Signed-off-by Ahmed S. Darwish <[email protected]>Reviewed-by Sebastian Andrzej Siewior <[email protected]>Signed-off-by Jens Axboe <[email protected]>
part_nr_sects_write() was in include/linux/genhd.h before 581e26004a09 ("block: move block layer internals out of include/linux/genhd.h"). Fixed and queued for all branched.
Signature · 2 lines
Thanks, Sasha