[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFj5m9L2qin-h1qfPbhotSr-2Xh+mnQbsWhpzeK3dA_YTQ=JpA@mail.gmail.com>
Date: Fri, 12 Jul 2024 09:01:08 +0800
From: Ming Lei <ming.lei@...hat.com>
To: Bart Van Assche <bvanassche@....org>
Cc: YangYang <yang.yang@...o.com>, Andrew Morton <akpm@...ux-foundation.org>,
Jens Axboe <axboe@...nel.dk>, Omar Sandoval <osandov@...com>, linux-kernel@...r.kernel.org,
linux-block@...r.kernel.org
Subject: Re: [PATCH v6] sbitmap: fix io hung due to race on sbitmap_word::cleared
On Fri, Jul 12, 2024 at 12:33 AM Bart Van Assche <bvanassche@....org> wrote:
>
> On 7/11/24 6:39 AM, Ming Lei wrote:
> > There are only two WRITE on 'cleared':
> >
> > - xchg(&map->cleared, 0) in sbitmap_deferred_clear()
> >
> > - set_bit() in sbitmap_deferred_clear_bit()
> >
> > xchg() supposes to provide such protection already.
>
> Hi Ming,
>
> The comment above 'swap_lock' in this patch is as follows:
>
> /**
> * @swap_lock: Held while swapping word <-> cleared
> */
>
> In other words, 'swap_lock' is used to serialize *code*. Using
> synchronization objects to serialize code is known as an anti-pattern,
> something that shouldn't be done.
> Synchronization objects should be used
> to serialize access to data.
It can be thought of serializing UPDATE on both ->word and ->cleared,
instead of code.
> Hence my question whether it would be
> appropriate to protect all 'cleared' changes with the newly introduced
> spinlock.
Wrt. ->cleared only update, xchag() is enough.
Thanks,
Ming
Powered by blists - more mailing lists