lkml.org 
[lkml]   [2012]   [Mar]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 17.5] blkcg: skip blkg printing if q isn't associated with disk
    From 753d7ea85c1d8648a9edb84539849018631335ea Mon Sep 17 00:00:00 2001
    From: Vivek Goyal <vgoyal@redhat.com>
    Date: Mon, 5 Mar 2012 12:54:07 -0800

    blk-cgroup printing code currently assumes that there is a device/disk
    associated with every queue in the system, but modules like floppy,
    can instantiate request queues without registering disk which can lead
    to oops.

    Skip the queue/blkg which don't have dev/disk associated with them.

    -tj: Factored out backing_dev_info check into blkg_dev_name().

    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    This causes series of minor conflicts with following patches. I'll
    write about it in a reply to the top post.

    Thanks.

    block/blk-cgroup.c | 17 ++++++++++++++---
    1 files changed, 14 insertions(+), 3 deletions(-)

    diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
    index 8742af3..7694236 100644
    --- a/block/blk-cgroup.c
    +++ b/block/blk-cgroup.c
    @@ -951,13 +951,24 @@ static int blkiocg_file_write(struct cgroup *cgrp, struct cftype *cft,
    return ret;
    }

    +static const char *blkg_dev_name(struct blkio_group *blkg)
    +{
    + /* some drivers (floppy) instantiate a queue w/o disk registered */
    + if (blkg->q->backing_dev_info.dev)
    + return dev_name(blkg->q->backing_dev_info.dev);
    + return NULL;
    +}
    +
    static void blkio_print_group_conf(struct cftype *cft, struct blkio_group *blkg,
    struct seq_file *m)
    {
    - const char *dname = dev_name(blkg->q->backing_dev_info.dev);
    + const char *dname = blkg_dev_name(blkg);
    int fileid = BLKIOFILE_ATTR(cft->private);
    int rw = WRITE;

    + if (!dname)
    + return;
    +
    switch (blkg->plid) {
    case BLKIO_POLICY_PROP:
    if (blkg->conf.weight)
    @@ -1049,9 +1060,9 @@ static int blkio_read_blkg_stats(struct blkio_cgroup *blkcg,

    rcu_read_lock();
    hlist_for_each_entry_rcu(blkg, n, &blkcg->blkg_list, blkcg_node) {
    - const char *dname = dev_name(blkg->q->backing_dev_info.dev);
    + const char *dname = blkg_dev_name(blkg);

    - if (BLKIOFILE_POLICY(cft->private) != blkg->plid)
    + if (!dname || BLKIOFILE_POLICY(cft->private) != blkg->plid)
    continue;
    if (pcpu)
    cgroup_total += blkio_get_stat_cpu(blkg, cb, dname,
    --
    1.7.7.3


    \
     
     \ /
      Last update: 2012-03-05 22:03    [W:0.027 / U:64.720 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site