On 11/28/24 4:57 PM, Matthew Wilcox wrote: > On Fri, Nov 29, 2024 at 12:30:35AM +0100, Jann Horn wrote: >>> ------------[ cut here ]------------ >>> WARNING: CPU: 0 PID: 16 at io_uring/tctx.c:51 __io_uring_free+0xfa/0x140 io_uring/tctx.c:51 >> >> This warning is a check for WARN_ON_ONCE(!xa_empty(&tctx->xa)); and as >> Jens pointed out, this was triggered after error injection caused a >> memory allocation inside xa_store() to fail. >> >> Is there maybe an issue where xa_store() can fail midway through while >> allocating memory for the xarray, so that xa_empty() is no longer true >> even though there is nothing in the xarray? (And if yes, is that >> working as intended?) Heh, I had the exact same thought when I originally looked at this issue. I did code inspection on the io_uring side and tried with error injection, but could not trigger it. Hence the io_uring side looks fine, so must be lower down. > Yes, that's a known possibility. We have similar problems when people > use error injection with mapping->i_pages. The effort to fix it seems > disproportionate to the severity of the problem. Doesn't seem like a big deal, particularly when you essentially need fault injection to trigger it. As long as the xa_empty() is the only false positive. I wonder if I should just change the io_uring side to do something ala: xa_for_each(&tctx->xa, index, node) { WARN_ON_ONCE(1); break; } rather than the xa_empty() warn on. That should get rid of it on my side at least. -- Jens Axboe