lkml.org 
[lkml]   [2010]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/17] blktrans: track open and close calls.
    Date
    This patch adds tracking for open and close calls.
    Now trans ->open and ->release are never called twise in a row
    ->release is also called once before mtd device disappers

    Proper locking will be added in follow up patch

    Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
    ---
    drivers/mtd/mtd_blkdevs.c | 18 ++++++++++++++++++
    include/linux/mtd/blktrans.h | 1 +
    2 files changed, 19 insertions(+), 0 deletions(-)

    diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
    index 93c87af..966398b 100644
    --- a/drivers/mtd/mtd_blkdevs.c
    +++ b/drivers/mtd/mtd_blkdevs.c
    @@ -128,6 +128,9 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
    if (!get_mtd_device(NULL, dev->mtd->index))
    goto out;

    + if (dev->open++)
    + goto out;
    +
    if (!try_module_get(tr->owner))
    goto out_tr;

    @@ -153,6 +156,10 @@ static int blktrans_release(struct gendisk *disk, fmode_t mode)
    struct mtd_blktrans_ops *tr = dev->tr;
    int ret = 0;

    + dev->open--;
    + if (dev->open)
    + return 0;
    +
    if (tr->release)
    ret = tr->release(dev);

    @@ -304,6 +311,7 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
    if (new->readonly)
    set_disk_ro(gd, 1);

    + new->open = 0;
    add_disk(gd);

    return 0;
    @@ -333,6 +341,16 @@ int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old)
    /* Stop the thread */
    kthread_stop(old->thread);

    + if (old->open) {
    + if (old->tr->release)
    + old->tr->release(old);
    + put_mtd_device(old->mtd);
    + }
    +
    + /* From now on, no calls into trans can be made */
    + /* Mtd device will be gone real soon now */
    + old->mtd = NULL;
    +
    blk_cleanup_queue(old->rq);
    return 0;
    }
    diff --git a/include/linux/mtd/blktrans.h b/include/linux/mtd/blktrans.h
    index a4b3928..507f7b2 100644
    --- a/include/linux/mtd/blktrans.h
    +++ b/include/linux/mtd/blktrans.h
    @@ -24,6 +24,7 @@ struct mtd_blktrans_dev {
    int devnum;
    unsigned long size;
    int readonly;
    + int open;
    struct gendisk *disk;
    struct task_struct *thread;
    struct request_queue *rq;
    --
    1.6.3.3


    \
     
     \ /
      Last update: 2010-01-30 16:09    [W:3.063 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site