lkml.org 
[lkml]   [2010]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/5] mtd: fix bdev exclusive open bugs in block2mtd::add_device()
    Date
    There are two bdev exclusive open bugs.

    * open_bdev_exclusive() must not be called with NULL holder. Use dev
    as the holder.

    * open_by_devnum() doesn't open the bdev exclusively but
    block2mtd_free_device() always assumes it. Explicitly claim the
    bdev.

    The latter is rather clumsy but will be simplified with future
    blkdev_get/put() cleanups.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: linux-mtd@lists.infradead.org
    ---
    drivers/mtd/devices/block2mtd.c | 11 ++++++++++-
    1 files changed, 10 insertions(+), 1 deletions(-)

    diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
    index 2cf0cc6..806a9ed 100644
    --- a/drivers/mtd/devices/block2mtd.c
    +++ b/drivers/mtd/devices/block2mtd.c
    @@ -246,7 +246,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)
    return NULL;

    /* Get a handle on the device */
    - bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL);
    + bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, dev);
    #ifndef MODULE
    if (IS_ERR(bdev)) {

    @@ -256,6 +256,15 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)
    dev_t devt = name_to_dev_t(devname);
    if (devt) {
    bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
    + if (!IS_ERR(bdev)) {
    + int ret;
    + ret = bd_claim(bdev, dev);
    + if (ret) {
    + blkdev_put(bdev,
    + FMODE_READ | FMODE_WRITE);
    + bdev = ERR_PTR(ret);
    + }
    + }
    }
    }
    #endif
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-11-01 17:19    [W:0.021 / U:2.744 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site