Messages in this thread | | | Date | Tue, 11 Mar 2014 21:48:28 +0100 | From | Alexander Gordeev <> | Subject | Re: [PATCH] percpu_ida: Handle out-of-tags gracefully |
| |
On Tue, Mar 11, 2014 at 07:10:18PM +0100, Bart Van Assche wrote: > > I assume the BUG() above hits? If so, I am failing to understand how > > the code gets here. Mind elaborate? > > Hello Alexander, > > You are correct, the BUG() mentioned in the call stack in the > description of this patch does indeed correspond with the BUG() > statement in the above code. That BUG() was encountered while testing > the scsi-mq patch series with a workload with a large queue depth. I > think the fact that I hit that BUG() statement means that my workload > was queueing requests faster than these were processed by the SCSI LLD > and hence that percpu_ida_alloc() ran out of tags.
Function steal_tags() is entered with disabled interrupts and pool->lock taken. Then the 'for' cycle enters/loops while 'cpus_have_tags' is not zero. Which means we can not end up with no set bits at all - and that is the reason why BUG() is (legitimately) placed there.
> Bart.
-- Regards, Alexander Gordeev agordeev@redhat.com
| |