On Fri, 31 Jan 2025 18:06:00 +0900 Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx> wrote: > +static void zram_slot_write_lock(struct zram *zram, u32 index) > +{ > + atomic_t *lock = &zram->table[index].lock; > + int old = atomic_read(lock); > + > + do { > + if (old != ZRAM_ENTRY_UNLOCKED) { > + cond_resched(); > + old = atomic_read(lock); > + continue; > + } > + } while (!atomic_try_cmpxchg(lock, &old, ZRAM_ENTRY_WRLOCKED)); > +} I expect that if the calling userspace process has realtime policy (eg SCHED_FIFO) then the cond_resched() won't schedule SCHED_NORMAL tasks and this becomes a busy loop. And if the machine is single-CPU, the loop is infinite. I do agree that for inventing new locking schemes, the bar is set really high.