lkml.org 
[lkml]   [2021]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 3/3] loop: Charge i/o to mem and blk cg
    On Tue, Jun 29, 2021 at 10:03:33AM -0400, Dan Schatzberg <schatzberg.dan@gmail.com> wrote:
    > Hmm, perhaps I'm not understanding how the reference counting works,
    > but my understanding is that we enter loop_queue_rq with presumably
    > some code earlier holding a reference to the blkcg, we only need to
    > acquire a reference sometime before returning from loop_queue_rq. The
    > "window" between loop_queue_rq and loop_queue_work is all
    > straight-line code so there's no possibility for the earlier code to
    > get control back and drop the reference.

    I don't say the current implementation is wrong, it just looked
    suspicious to me when the css address is copied without taking the
    reference.
    The straight path is clear, I'm not sure about later invocations through
    loop_workfn where the blkcg_css is accessed via the cmd->blkcg_css.

    > Where would you suggest putting such a comment?

    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);
    /*
    * 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 */
    cmd->blkcg_css = &bio_blkcg(rq->bio)->css;
    #ifdef CONFIG_MEMCG
    cmd->memcg_css =
    (On further thoughts, maybe the blkcg_css reference isn't needed even in
    the loop_worker if it can be reasoned that blkcg_css won't go away while
    there's an outstanding rq.)

    HTH,
    Michal
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2021-06-30 11:43    [W:4.842 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site