[lkml]   [2012]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH v3.4-rc5] block: iocontext->nr_tasks should be initialized to one
    create_task_io_context() left ioc->nr_tasks at zero; however, a newly
    created ioc should have its nr_tasks initialized to one as it begins
    attached to the task creating it.

    This affects only CLONE_IO which currently doesn't seem to have any
    actual user. Sasha triggered WARN_ON_ONCE() in ioc_task_link() using
    syscall fuzzer. Even when it happens, the failure mode isn't critical
    (blk-cgroup may allow attaching a CLONE_IO'd task to a cgroup when it
    shouldn't and blkcg limits may behave weirdly).

    Fix it by initializing it to one in create_task_io_context().

    Signed-off-by: Tejun Heo <>
    Reported-by: Sasha Levin <>
    LKML-Reference: <1335873936.16988.148.camel@lappy>
    block/blk-ioc.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/block/blk-ioc.c b/block/blk-ioc.c
    index 1e2d53b..c942409 100644
    --- a/block/blk-ioc.c
    +++ b/block/blk-ioc.c
    @@ -244,6 +244,7 @@ int create_task_io_context(struct task_struct *task, gfp_t gfp_flags, int node)
    /* initialize */
    atomic_long_set(&ioc->refcount, 1);
    atomic_set(&ioc->active_ref, 1);
    + atomic_set(&ioc->nr_tasks, 1);
    INIT_RADIX_TREE(&ioc->icq_tree, GFP_ATOMIC | __GFP_HIGH);

     \ /
      Last update: 2012-05-01 18:21    [W:0.022 / U:30.496 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site