Re: [PATCH 3/3] loop: Charge i/o to mem and blk cg
From: Dan Schatzberg <hidden>
Date: 2021-06-30 14:50:08
Also in:
linux-block, linux-mm, lkml
quoted hunk ↗ jump to hunk
This is how I understand it:--- a/drivers/block/loop.c +++ b/drivers/block/loop.c@@ -996,6 +996,7 @@ static void loop_queue_work(struct loop_device *lo, struct loop_cmd *cmd) rb_insert_color(&worker->rb_node, &lo->worker_tree); queue_work: if (worker) { + WARN_ON_ONCE(worker->blkcg_css != cmd->blkcg_css);
Yes, this is correct. Though the check here seems a bit obvious to me
- it must be correct because we assign worker above:
if (cur_worker->blkcg_css == cmd->blkcg_css) {
worker = cur_worker;
break;
or when we construct the worker:
worker->blkcg_css = cmd->blkcg_css;
I think this WARN_ON_ONCE check might be more interesting in
loop_process_work which invokes loop_handle_cmd and actually uses
cmd->blkcg_css. In any event, your understanding is correct here.
quoted hunk ↗ jump to hunk
/* * We need to remove from the idle list here while * holding the lock so that the idle timer doesn't@@ -2106,6 +2107,8 @@ static blk_status_t loop_queue_rq(struct blk_mq_hw_ctx *hctx, cmd->memcg_css = NULL; #ifdef CONFIG_BLK_CGROUP if (rq->bio && rq->bio->bi_blkg) { + /* reference to blkcg_css will be held by loop_worker (outlives + * cmd) or it is the eternal root css */
Yes, this is correct. Feel free to add my Acked-by to such a patch