mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
block, cfq: move io_cq lookup to blk-ioc.c
Now that all io_cq related data structures are in block core layer, io_cq lookup can be moved from cfq-iosched.c to blk-ioc.c. Lookup logic from cfq_cic_lookup() is moved to ioc_lookup_icq() with parameter return type changes (cfqd -> request_queue, cfq_io_cq -> io_cq) and cfq_cic_lookup() becomes thin wrapper around cfq_cic_lookup(). Signed-off-by: Tejun Heo <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
a612fddf0d
commit
47fdd4ca96
3 changed files with 45 additions and 40 deletions
|
|
@ -266,6 +266,42 @@ struct io_context *get_task_io_context(struct task_struct *task,
|
|||
}
|
||||
EXPORT_SYMBOL(get_task_io_context);
|
||||
|
||||
/**
|
||||
* ioc_lookup_icq - lookup io_cq from ioc
|
||||
* @ioc: the associated io_context
|
||||
* @q: the associated request_queue
|
||||
*
|
||||
* Look up io_cq associated with @ioc - @q pair from @ioc. Must be called
|
||||
* with @q->queue_lock held.
|
||||
*/
|
||||
struct io_cq *ioc_lookup_icq(struct io_context *ioc, struct request_queue *q)
|
||||
{
|
||||
struct io_cq *icq;
|
||||
|
||||
lockdep_assert_held(q->queue_lock);
|
||||
|
||||
/*
|
||||
* icq's are indexed from @ioc using radix tree and hint pointer,
|
||||
* both of which are protected with RCU. All removals are done
|
||||
* holding both q and ioc locks, and we're holding q lock - if we
|
||||
* find a icq which points to us, it's guaranteed to be valid.
|
||||
*/
|
||||
rcu_read_lock();
|
||||
icq = rcu_dereference(ioc->icq_hint);
|
||||
if (icq && icq->q == q)
|
||||
goto out;
|
||||
|
||||
icq = radix_tree_lookup(&ioc->icq_tree, q->id);
|
||||
if (icq && icq->q == q)
|
||||
rcu_assign_pointer(ioc->icq_hint, icq); /* allowed to race */
|
||||
else
|
||||
icq = NULL;
|
||||
out:
|
||||
rcu_read_unlock();
|
||||
return icq;
|
||||
}
|
||||
EXPORT_SYMBOL(ioc_lookup_icq);
|
||||
|
||||
void ioc_set_changed(struct io_context *ioc, int which)
|
||||
{
|
||||
struct io_cq *icq;
|
||||
|
|
|
|||
Loading…
Reference in a new issue