percpu_ida: fix a live lock
authorShaohua Li <shli@kernel.org>
Tue, 31 Dec 2013 03:38:27 +0000 (11:38 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 30 Jan 2014 19:57:25 +0000 (12:57 -0700)
commitd835502f3dacad1638d516ab156d66f0ba377cf5
tree1a82543b7c14120251a4bceaa08f5cc9f86ecf43
parent53d8ab29f8f6d67e37857b68189b38fa3d87dd8e
percpu_ida: fix a live lock

steal_tags only happens when free tags is more than half of the total
tags.  This is too strict and can cause live lock. I found that if one
cpu has free tags, but other cpu can't steal (thread is bound to
specific cpus), threads which want to allocate tags are always
sleeping. I found this when I run next patch, but this could happen
without it I think.

I did performance test too with null_blk. Two cases (each cpu has enough
percpu tags, or total tags are limited), no performance changes were
observed.

Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
lib/percpu_ida.c