loop: move command blkcg/memcg initialization into loop_queue_work for-6.15/block
authorMing Lei <ming.lei@redhat.com>
Sat, 22 Mar 2025 01:26:12 +0000 (09:26 +0800)
committerJens Axboe <axboe@kernel.dk>
Sat, 22 Mar 2025 17:39:45 +0000 (11:39 -0600)
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>
Link: https://lore.kernel.org/r/20250322012617.354222-4-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index 419ca675342a272ffde753fa1beecccde8c970d4..c14da87efb07789f4d93cc6ed7cff6ded7daa2f9 100644 (file)
@@ -877,11 +877,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))
@@ -1926,21 +1943,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;