On Mon, Apr 29, 2019 at 10:14:59PM +0200, Andrea Parri wrote: > This barrier only applies to the read-modify-write operations; in > particular, it does not apply to the atomic_set() primitive. > > Replace the barrier with an smp_mb(). > > Fixes: 6c0ca7ae292ad ("sbitmap: fix wakeup hang after sbq resize") > Cc: stable@xxxxxxxxxxxxxxx > Reported-by: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxx> > Reported-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Signed-off-by: Andrea Parri <andrea.parri@xxxxxxxxxxxxxxxxxxxx> > Cc: Jens Axboe <axboe@xxxxxxxxx> > Cc: Omar Sandoval <osandov@xxxxxx> > Cc: linux-block@xxxxxxxxxxxxxxx > --- > lib/sbitmap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/sbitmap.c b/lib/sbitmap.c > index 155fe38756ecf..4a7fc4915dfc6 100644 > --- a/lib/sbitmap.c > +++ b/lib/sbitmap.c > @@ -435,7 +435,7 @@ static void sbitmap_queue_update_wake_batch(struct sbitmap_queue *sbq, > * to ensure that the batch size is updated before the wait > * counts. > */ > - smp_mb__before_atomic(); > + smp_mb(); > for (i = 0; i < SBQ_WAIT_QUEUES; i++) > atomic_set(&sbq->ws[i].wait_cnt, 1); > } > -- > 2.7.4 > sbitmap_queue_update_wake_batch() won't be called in fast path, and the fix is correct too, so: Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> thanks, Ming