lkml.org 
[lkml]   [2008]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/15] block: drop references taken by class_find_device()
    Date
    From: Kay Sievers <kay.sievers@vrfy.org>

    Otherwise we leak references, which is not a good thing to do.


    Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    block/genhd.c | 22 ++++++++++++++++------
    1 files changed, 16 insertions(+), 6 deletions(-)

    diff --git a/block/genhd.c b/block/genhd.c
    index f34befc..656c2c7 100644
    --- a/block/genhd.c
    +++ b/block/genhd.c
    @@ -313,8 +313,10 @@ static void *part_start(struct seq_file *part, loff_t *pos)

    mutex_lock(&block_class_lock);
    dev = class_find_device(&block_class, NULL, &k, find_start);
    - if (dev)
    + if (dev) {
    + put_device(dev);
    return dev_to_disk(dev);
    + }
    return NULL;
    }

    @@ -331,8 +333,10 @@ static void *part_next(struct seq_file *part, void *v, loff_t *pos)
    struct device *dev;
    ++*pos;
    dev = class_find_device(&block_class, &gp->dev, NULL, find_next);
    - if (dev)
    + if (dev) {
    + put_device(dev);
    return dev_to_disk(dev);
    + }
    return NULL;
    }

    @@ -573,8 +577,10 @@ static void *diskstats_start(struct seq_file *part, loff_t *pos)

    mutex_lock(&block_class_lock);
    dev = class_find_device(&block_class, NULL, &k, find_start);
    - if (dev)
    + if (dev) {
    + put_device(dev);
    return dev_to_disk(dev);
    + }
    return NULL;
    }

    @@ -585,8 +591,10 @@ static void *diskstats_next(struct seq_file *part, void *v, loff_t *pos)

    ++*pos;
    dev = class_find_device(&block_class, &gp->dev, NULL, find_next);
    - if (dev)
    + if (dev) {
    + put_device(dev);
    return dev_to_disk(dev);
    + }
    return NULL;
    }

    @@ -714,10 +722,12 @@ dev_t blk_lookup_devt(const char *name, int part)
    mutex_lock(&block_class_lock);
    find.name = name;
    find.part = part;
    - dev = class_find_device(&block_class, NULL, (void *)&find, match_id);
    - if (dev)
    + dev = class_find_device(&block_class, NULL, &find, match_id);
    + if (dev) {
    + put_device(dev);
    devt = MKDEV(MAJOR(dev->devt),
    MINOR(dev->devt) + part);
    + }
    mutex_unlock(&block_class_lock);

    return devt;
    --
    1.5.6.5


    \
     
     \ /
      Last update: 2008-08-21 19:43    [W:0.022 / U:59.100 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site