In short, sbitmap_deferred_clear() lights up pretty much in my profiler, so these optimisations gave me ~1% more t-put. All the heavy stuff is in [2/2]. Would love someones eye to check it. I also want to replace cmpxchg() in that function with a single atomic and, that's slightly lighter and also transfers it from lock-free to wait-free, that's pretty neat. The problem is that apparently there is a non-atomic_t atomic and, and atomic_t is unsigned int but all the bitmap do unsigned long. Advice is welcome. Pavel Begunkov (2): sbitmap: optimise sbitmap_deferred_clear() sbitmap: remove swap_lock include/linux/sbitmap.h | 5 ----- lib/sbitmap.c | 21 +++++++-------------- 2 files changed, 7 insertions(+), 19 deletions(-) -- 2.24.0