mirror of https://github.com/torvalds/linux.git
loop: move command blkcg/memcg initialization into loop_queue_work
Move loop command blkcg/memcg initialization into loop_queue_work, and prepare for supporting to handle loop io command by IOCB_NOWAIT. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
c66e9708f9
commit
f4788ae9d7
|
|
@ -831,11 +831,28 @@ static inline int queue_on_root_worker(struct cgroup_subsys_state *css)
|
|||
|
||||
static void loop_queue_work(struct loop_device *lo, struct loop_cmd *cmd)
|
||||
{
|
||||
struct request __maybe_unused *rq = blk_mq_rq_from_pdu(cmd);
|
||||
struct rb_node **node, *parent = NULL;
|
||||
struct loop_worker *cur_worker, *worker = NULL;
|
||||
struct work_struct *work;
|
||||
struct list_head *cmd_list;
|
||||
|
||||
/* always use the first bio's css */
|
||||
cmd->blkcg_css = NULL;
|
||||
cmd->memcg_css = NULL;
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
if (rq->bio) {
|
||||
cmd->blkcg_css = bio_blkcg_css(rq->bio);
|
||||
#ifdef CONFIG_MEMCG
|
||||
if (cmd->blkcg_css) {
|
||||
cmd->memcg_css =
|
||||
cgroup_get_e_css(cmd->blkcg_css->cgroup,
|
||||
&memory_cgrp_subsys);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
spin_lock_irq(&lo->lo_work_lock);
|
||||
|
||||
if (queue_on_root_worker(cmd->blkcg_css))
|
||||
|
|
@ -1907,21 +1924,6 @@ static blk_status_t loop_queue_rq(struct blk_mq_hw_ctx *hctx,
|
|||
break;
|
||||
}
|
||||
|
||||
/* always use the first bio's css */
|
||||
cmd->blkcg_css = NULL;
|
||||
cmd->memcg_css = NULL;
|
||||
#ifdef CONFIG_BLK_CGROUP
|
||||
if (rq->bio) {
|
||||
cmd->blkcg_css = bio_blkcg_css(rq->bio);
|
||||
#ifdef CONFIG_MEMCG
|
||||
if (cmd->blkcg_css) {
|
||||
cmd->memcg_css =
|
||||
cgroup_get_e_css(cmd->blkcg_css->cgroup,
|
||||
&memory_cgrp_subsys);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
loop_queue_work(lo, cmd);
|
||||
|
||||
return BLK_STS_OK;
|
||||
|
|
|
|||
Loading…
Reference in New Issue