lkml.org 
[lkml]   [2020]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v1 04/25] block: nr_sects_write(): Disable preemption on seqcount write
    On Tue, May 19, 2020 at 11:45:26PM +0200, Ahmed S. Darwish wrote:
    > 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.
    >
    > Fixes: c83f6bf98dc1 ("block: add partition resize function to blkpg ioctl")
    > Cc: <stable@vger.kernel.org>
    > Signed-off-by: Ahmed S. Darwish <a.darwish@linutronix.de>
    > Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    > ---
    > block/blk.h | 2 ++
    > 1 file changed, 2 insertions(+)
    >
    > diff --git a/block/blk.h b/block/blk.h
    > index 0a94ec68af32..151f86932547 100644
    > --- a/block/blk.h
    > +++ b/block/blk.h
    > @@ -470,9 +470,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;

    This does look like something that include/linux/u64_stats_sync.h could
    help with.

    \
     
     \ /
      Last update: 2020-05-22 18:40    [W:2.245 / U:0.676 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site