blk-mq.c (a347c7ad8edf4c5685154f3fdc3c12fc1db800ba) blk-mq.c (590b5b7d8671e011d1a8e1ab20c60addb249d015)
1/*
2 * Block multiqueue core code
3 *
4 * Copyright (C) 2013-2014 Jens Axboe
5 * Copyright (C) 2013-2014 Christoph Hellwig
6 */
7#include <linux/kernel.h>
8#include <linux/module.h>

--- 1889 unchanged lines hidden (view full) ---

1898 if (node == NUMA_NO_NODE)
1899 node = set->numa_node;
1900
1901 tags = blk_mq_init_tags(nr_tags, reserved_tags, node,
1902 BLK_MQ_FLAG_TO_ALLOC_POLICY(set->flags));
1903 if (!tags)
1904 return NULL;
1905
1/*
2 * Block multiqueue core code
3 *
4 * Copyright (C) 2013-2014 Jens Axboe
5 * Copyright (C) 2013-2014 Christoph Hellwig
6 */
7#include <linux/kernel.h>
8#include <linux/module.h>

--- 1889 unchanged lines hidden (view full) ---

1898 if (node == NUMA_NO_NODE)
1899 node = set->numa_node;
1900
1901 tags = blk_mq_init_tags(nr_tags, reserved_tags, node,
1902 BLK_MQ_FLAG_TO_ALLOC_POLICY(set->flags));
1903 if (!tags)
1904 return NULL;
1905
1906 tags->rqs = kzalloc_node(nr_tags * sizeof(struct request *),
1906 tags->rqs = kcalloc_node(nr_tags, sizeof(struct request *),
1907 GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
1908 node);
1909 if (!tags->rqs) {
1910 blk_mq_free_tags(tags);
1911 return NULL;
1912 }
1913
1907 GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
1908 node);
1909 if (!tags->rqs) {
1910 blk_mq_free_tags(tags);
1911 return NULL;
1912 }
1913
1914 tags->static_rqs = kzalloc_node(nr_tags * sizeof(struct request *),
1915 GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
1916 node);
1914 tags->static_rqs = kcalloc_node(nr_tags, sizeof(struct request *),
1915 GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY,
1916 node);
1917 if (!tags->static_rqs) {
1918 kfree(tags->rqs);
1919 blk_mq_free_tags(tags);
1920 return NULL;
1921 }
1922
1923 return tags;
1924}

--- 419 unchanged lines hidden (view full) ---

2344}
2345
2346static void blk_mq_del_queue_tag_set(struct request_queue *q)
2347{
2348 struct blk_mq_tag_set *set = q->tag_set;
2349
2350 mutex_lock(&set->tag_list_lock);
2351 list_del_rcu(&q->tag_set_list);
1917 if (!tags->static_rqs) {
1918 kfree(tags->rqs);
1919 blk_mq_free_tags(tags);
1920 return NULL;
1921 }
1922
1923 return tags;
1924}

--- 419 unchanged lines hidden (view full) ---

2344}
2345
2346static void blk_mq_del_queue_tag_set(struct request_queue *q)
2347{
2348 struct blk_mq_tag_set *set = q->tag_set;
2349
2350 mutex_lock(&set->tag_list_lock);
2351 list_del_rcu(&q->tag_set_list);
2352 INIT_LIST_HEAD(&q->tag_set_list);
2352 if (list_is_singular(&set->tag_list)) {
2353 /* just transitioned to unshared */
2354 set->flags &= ~BLK_MQ_F_TAG_SHARED;
2355 /* update existing queue */
2356 blk_mq_update_tag_set_depth(set, false);
2357 }
2358 mutex_unlock(&set->tag_list_lock);
2353 if (list_is_singular(&set->tag_list)) {
2354 /* just transitioned to unshared */
2355 set->flags &= ~BLK_MQ_F_TAG_SHARED;
2356 /* update existing queue */
2357 blk_mq_update_tag_set_depth(set, false);
2358 }
2359 mutex_unlock(&set->tag_list_lock);
2360
2359 synchronize_rcu();
2361 synchronize_rcu();
2360 INIT_LIST_HEAD(&q->tag_set_list);
2361}
2362
2363static void blk_mq_add_queue_tag_set(struct blk_mq_tag_set *set,
2364 struct request_queue *q)
2365{
2366 q->tag_set = set;
2367
2368 mutex_lock(&set->tag_list_lock);

--- 147 unchanged lines hidden (view full) ---

2516
2517 q->queue_ctx = alloc_percpu(struct blk_mq_ctx);
2518 if (!q->queue_ctx)
2519 goto err_exit;
2520
2521 /* init q->mq_kobj and sw queues' kobjects */
2522 blk_mq_sysfs_init(q);
2523
2362}
2363
2364static void blk_mq_add_queue_tag_set(struct blk_mq_tag_set *set,
2365 struct request_queue *q)
2366{
2367 q->tag_set = set;
2368
2369 mutex_lock(&set->tag_list_lock);

--- 147 unchanged lines hidden (view full) ---

2517
2518 q->queue_ctx = alloc_percpu(struct blk_mq_ctx);
2519 if (!q->queue_ctx)
2520 goto err_exit;
2521
2522 /* init q->mq_kobj and sw queues' kobjects */
2523 blk_mq_sysfs_init(q);
2524
2524 q->queue_hw_ctx = kzalloc_node(nr_cpu_ids * sizeof(*(q->queue_hw_ctx)),
2525 q->queue_hw_ctx = kcalloc_node(nr_cpu_ids, sizeof(*(q->queue_hw_ctx)),
2525 GFP_KERNEL, set->numa_node);
2526 if (!q->queue_hw_ctx)
2527 goto err_percpu;
2528
2529 q->mq_map = set->mq_map;
2530
2531 blk_mq_realloc_hw_ctxs(set, q);
2532 if (!q->nr_hw_queues)

--- 202 unchanged lines hidden (view full) ---

2735 set->queue_depth = min(64U, set->queue_depth);
2736 }
2737 /*
2738 * There is no use for more h/w queues than cpus.
2739 */
2740 if (set->nr_hw_queues > nr_cpu_ids)
2741 set->nr_hw_queues = nr_cpu_ids;
2742
2526 GFP_KERNEL, set->numa_node);
2527 if (!q->queue_hw_ctx)
2528 goto err_percpu;
2529
2530 q->mq_map = set->mq_map;
2531
2532 blk_mq_realloc_hw_ctxs(set, q);
2533 if (!q->nr_hw_queues)

--- 202 unchanged lines hidden (view full) ---

2736 set->queue_depth = min(64U, set->queue_depth);
2737 }
2738 /*
2739 * There is no use for more h/w queues than cpus.
2740 */
2741 if (set->nr_hw_queues > nr_cpu_ids)
2742 set->nr_hw_queues = nr_cpu_ids;
2743
2743 set->tags = kzalloc_node(nr_cpu_ids * sizeof(struct blk_mq_tags *),
2744 set->tags = kcalloc_node(nr_cpu_ids, sizeof(struct blk_mq_tags *),
2744 GFP_KERNEL, set->numa_node);
2745 if (!set->tags)
2746 return -ENOMEM;
2747
2748 ret = -ENOMEM;
2745 GFP_KERNEL, set->numa_node);
2746 if (!set->tags)
2747 return -ENOMEM;
2748
2749 ret = -ENOMEM;
2749 set->mq_map = kzalloc_node(sizeof(*set->mq_map) * nr_cpu_ids,
2750 GFP_KERNEL, set->numa_node);
2750 set->mq_map = kcalloc_node(nr_cpu_ids, sizeof(*set->mq_map),
2751 GFP_KERNEL, set->numa_node);
2751 if (!set->mq_map)
2752 goto out_free_tags;
2753
2754 ret = blk_mq_update_queue_map(set);
2755 if (ret)
2756 goto out_free_mq_map;
2757
2758 ret = blk_mq_alloc_rq_maps(set);

--- 309 unchanged lines hidden ---
2752 if (!set->mq_map)
2753 goto out_free_tags;
2754
2755 ret = blk_mq_update_queue_map(set);
2756 if (ret)
2757 goto out_free_mq_map;
2758
2759 ret = blk_mq_alloc_rq_maps(set);

--- 309 unchanged lines hidden ---