aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorShaohua Li <shli@kernel.org>2013-10-14 21:05:03 -0400
committerJens Axboe <axboe@kernel.dk>2013-10-25 06:56:00 -0400
commit1dddc01af0d42b21058e0cb9c1ca9e8d5204d9b0 (patch)
treec2812f72384ee2f4e0d90f65844bdd91a370e8c5 /lib
parent7fc2ba17e8bf9f218cac10cc2a3de613d9d9086d (diff)
percpu_ida: add an API to return free tags
Add an API to return free tags, blk-mq-tag will use it. Note, this just returns a snapshot of free tags number. blk-mq-tag has two usages of it. One is for info output for diagnosis. The other is to quickly check if there are free tags for request dispatch checking. Neither requires very precise. Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Shaohua Li <shli@fusionio.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'lib')
-rw-r--r--lib/percpu_ida.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/percpu_ida.c b/lib/percpu_ida.c
index 0f51c1b556cf..b0698ea972c6 100644
--- a/lib/percpu_ida.c
+++ b/lib/percpu_ida.c
@@ -371,3 +371,20 @@ out:
371 return err; 371 return err;
372} 372}
373EXPORT_SYMBOL_GPL(percpu_ida_for_each_free); 373EXPORT_SYMBOL_GPL(percpu_ida_for_each_free);
374
375/**
376 * percpu_ida_free_tags - return free tags number of a specific cpu or global pool
377 * @pool: pool related
378 * @cpu: specific cpu or global pool if @cpu == nr_cpu_ids
379 *
380 * Note: this just returns a snapshot of free tags number.
381 */
382unsigned percpu_ida_free_tags(struct percpu_ida *pool, int cpu)
383{
384 struct percpu_ida_cpu *remote;
385 if (cpu == nr_cpu_ids)
386 return pool->nr_free;
387 remote = per_cpu_ptr(pool->tag_cpu, cpu);
388 return remote->nr_free;
389}
390EXPORT_SYMBOL_GPL(percpu_ida_free_tags);