On Wed, Feb 28, 2024 at 03:18:32PM +0000, Chengming Zhou wrote: > Now the release of zswap pool is controlled by percpu_ref, its release > callback (__zswap_pool_empty()) will be called when percpu_ref hit 0. > But this release callback may potentially be called from RCU callback > context by percpu_ref_kill(), which maybe in the interrupt context. > > So we need to use spin_lock_irqsave() and spin_unlock_irqrestore() > in the release callback: __zswap_pool_empty(). In other task context > places, spin_lock_irq() and spin_unlock_irq() are enough to avoid > potential deadlock. RCU callback context is BH, not IRQ, so it's enough to use spin_lock_bh(), no?