zram: Replace bit spinlocks with a spinlock_t.
authorMike Galbraith <umgwanakikbuti@gmail.com>
Fri, 6 Sep 2024 14:14:43 +0000 (16:14 +0200)
committerJens Axboe <axboe@kernel.dk>
Fri, 6 Sep 2024 14:51:08 +0000 (08:51 -0600)
commit9518e5bfaae19447d657983d0628062ab6712610
tree753e393d436841da8c595f6356859ecd09901217
parent296dbc72d29085d5fc34430d0760423071e9e81d
zram: Replace bit spinlocks with a spinlock_t.

The bit spinlock disables preemption. The spinlock_t lock becomes a sleeping
lock on PREEMPT_RT and it can not be acquired in this context. In this locked
section, zs_free() acquires a zs_pool::lock, and there is access to
zram::wb_limit_lock.

Add a spinlock_t for locking. Keep the set/ clear ZRAM_LOCK bit after
the lock has been acquired/ dropped. The size of struct zram_table_entry
increases by 4 bytes due to lock and additional 4 bytes padding with
CONFIG_ZRAM_TRACK_ENTRY_ACTIME enabled.

Signed-off-by: Mike Galbraith <umgwanakikbuti@gmail.com>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240906141520.730009-2-bigeasy@linutronix.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/zram/zram_drv.c
drivers/block/zram/zram_drv.h