Lines Matching refs:icq
37 struct io_cq *icq = container_of(head, struct io_cq, __rcu_head); in icq_free_icq_rcu() local
39 kmem_cache_free(icq->__rcu_icq_cache, icq); in icq_free_icq_rcu()
46 static void ioc_exit_icq(struct io_cq *icq) in ioc_exit_icq() argument
48 struct elevator_type *et = icq->q->elevator->type; in ioc_exit_icq()
50 if (icq->flags & ICQ_EXITED) in ioc_exit_icq()
54 et->ops.exit_icq(icq); in ioc_exit_icq()
56 icq->flags |= ICQ_EXITED; in ioc_exit_icq()
61 struct io_cq *icq; in ioc_exit_icqs() local
64 hlist_for_each_entry(icq, &ioc->icq_list, ioc_node) in ioc_exit_icqs()
65 ioc_exit_icq(icq); in ioc_exit_icqs()
73 static void ioc_destroy_icq(struct io_cq *icq) in ioc_destroy_icq() argument
75 struct io_context *ioc = icq->ioc; in ioc_destroy_icq()
76 struct request_queue *q = icq->q; in ioc_destroy_icq()
82 if (icq->flags & ICQ_DESTROYED) in ioc_destroy_icq()
85 radix_tree_delete(&ioc->icq_tree, icq->q->id); in ioc_destroy_icq()
86 hlist_del_init(&icq->ioc_node); in ioc_destroy_icq()
87 list_del_init(&icq->q_node); in ioc_destroy_icq()
94 if (rcu_access_pointer(ioc->icq_hint) == icq) in ioc_destroy_icq()
97 ioc_exit_icq(icq); in ioc_destroy_icq()
103 icq->__rcu_icq_cache = et->icq_cache; in ioc_destroy_icq()
104 icq->flags |= ICQ_DESTROYED; in ioc_destroy_icq()
105 call_rcu(&icq->__rcu_head, icq_free_icq_rcu); in ioc_destroy_icq()
119 struct io_cq *icq = hlist_entry(ioc->icq_list.first, in ioc_release_fn() local
121 struct request_queue *q = icq->q; in ioc_release_fn()
124 ioc_destroy_icq(icq); in ioc_release_fn()
135 ioc_destroy_icq(icq); in ioc_release_fn()
175 struct io_cq *icq = in ioc_clear_queue() local
182 spin_lock(&icq->ioc->lock); in ioc_clear_queue()
183 ioc_destroy_icq(icq); in ioc_clear_queue()
184 spin_unlock(&icq->ioc->lock); in ioc_clear_queue()
327 struct io_cq *icq; in ioc_lookup_icq() local
338 icq = rcu_dereference(ioc->icq_hint); in ioc_lookup_icq()
339 if (icq && icq->q == q) in ioc_lookup_icq()
342 icq = radix_tree_lookup(&ioc->icq_tree, q->id); in ioc_lookup_icq()
343 if (icq && icq->q == q) in ioc_lookup_icq()
344 rcu_assign_pointer(ioc->icq_hint, icq); /* allowed to race */ in ioc_lookup_icq()
346 icq = NULL; in ioc_lookup_icq()
349 return icq; in ioc_lookup_icq()
367 struct io_cq *icq; in ioc_create_icq() local
370 icq = kmem_cache_alloc_node(et->icq_cache, GFP_ATOMIC | __GFP_ZERO, in ioc_create_icq()
372 if (!icq) in ioc_create_icq()
376 kmem_cache_free(et->icq_cache, icq); in ioc_create_icq()
380 icq->ioc = ioc; in ioc_create_icq()
381 icq->q = q; in ioc_create_icq()
382 INIT_LIST_HEAD(&icq->q_node); in ioc_create_icq()
383 INIT_HLIST_NODE(&icq->ioc_node); in ioc_create_icq()
389 if (likely(!radix_tree_insert(&ioc->icq_tree, q->id, icq))) { in ioc_create_icq()
390 hlist_add_head(&icq->ioc_node, &ioc->icq_list); in ioc_create_icq()
391 list_add(&icq->q_node, &q->icq_list); in ioc_create_icq()
393 et->ops.init_icq(icq); in ioc_create_icq()
395 kmem_cache_free(et->icq_cache, icq); in ioc_create_icq()
396 icq = ioc_lookup_icq(q); in ioc_create_icq()
397 if (!icq) in ioc_create_icq()
404 return icq; in ioc_create_icq()
410 struct io_cq *icq = NULL; in ioc_find_get_icq() local
431 icq = ioc_lookup_icq(q); in ioc_find_get_icq()
435 if (!icq) { in ioc_find_get_icq()
436 icq = ioc_create_icq(q); in ioc_find_get_icq()
437 if (!icq) { in ioc_find_get_icq()
442 return icq; in ioc_find_get_icq()