rds_page_remainder_alloc() is invoked from a preemptible context or a
tasklet. There is no need to disable interrupts for locking.
Use local_bh_disable() instead of local_irq_save() for locking.
Cc: Allison Henderson <allison.henderson@oracle.com>
Cc: linux-rdma@vger.kernel.org
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://patch.msgid.link/20250512092736.229935-14-bigeasy@linutronix.de
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
gfp_t gfp)
{
struct rds_page_remainder *rem;
- unsigned long flags;
struct page *page;
int ret;
}
rem = &per_cpu(rds_page_remainders, get_cpu());
- local_irq_save(flags);
+ local_bh_disable();
while (1) {
/* avoid a tiny region getting stuck by tossing it */
}
/* alloc if there is nothing for us to use */
- local_irq_restore(flags);
+ local_bh_enable();
put_cpu();
page = alloc_page(gfp);
rem = &per_cpu(rds_page_remainders, get_cpu());
- local_irq_save(flags);
+ local_bh_disable();
if (!page) {
ret = -ENOMEM;
rem->r_offset = 0;
}
- local_irq_restore(flags);
+ local_bh_enable();
put_cpu();
out:
rdsdebug("bytes %lu ret %d %p %u %u\n", bytes, ret,