On Thu, 8 Sep 2022 16:25:47 +0800 "Sun, Jiebin" <jiebin.sun@xxxxxxxxx> wrote: > In our case, if the local > percpu counter is near to INT_MAX and there comes a big msgsz, the > overflow issue could happen. percpu_counter_add_batch() handles this - your big message won't overflow an s64. Lookng at percpu_counter_add_batch(), is this tweak right? - don't need to update *fbc->counters inside the lock - that __this_cpu_sub() is an obscure way of zeroing the thing --- a/lib/percpu_counter.c~a +++ a/lib/percpu_counter.c @@ -89,8 +89,8 @@ void percpu_counter_add_batch(struct per unsigned long flags; raw_spin_lock_irqsave(&fbc->lock, flags); fbc->count += count; - __this_cpu_sub(*fbc->counters, count - amount); raw_spin_unlock_irqrestore(&fbc->lock, flags); + __this_cpu_write(*fbc->counters, 0); } else { this_cpu_add(*fbc->counters, amount); } _