Message ID | 1247228821.20721.368.camel@localhost.localdomain |
---|---|
State | New, archived |
Headers | show |
Hi, > The problem is that the mtd_blkdevs module does not open MTD devices > before working with them. Gluebi changes revealed this problem. Below > is the patch which should fix the issue. Please, try and let me know > if it helps. > > ====================================================================== > > From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> > Subject: [PATCH] mtd: blkdevs: do not for get to get MTD devices > > Nowadays MTD devices have to be "get" before they can be > used. This has to be done with 'put_mtd_device()'. The > 'blktrans_open()' function did not do this and instead > used 'try_module_get()'. Fixe this. > > Since 'put_mtd_device()' already gets the module, extra > 'try_module_get()' is not needed. > > This fixes oops when one tries to use mtdbloc on tope of > gluebi. > > Reported-by: Holger Brunck <holger.brunck@keymile.com> > Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> > --- > drivers/mtd/mtd_blkdevs.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c > index 1409f01..2f55242 100644 > --- a/drivers/mtd/mtd_blkdevs.c > +++ b/drivers/mtd/mtd_blkdevs.c > @@ -139,7 +139,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode) > struct mtd_blktrans_ops *tr = dev->tr; > int ret = -ENODEV; > > - if (!try_module_get(dev->mtd->owner)) > + if (!get_mtd_device(NULL, dev->mtd->index)) > goto out; > > if (!try_module_get(tr->owner)) > @@ -153,7 +153,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode) > ret = 0; > if (tr->open && (ret = tr->open(dev))) { > dev->mtd->usecount--; > - module_put(dev->mtd->owner); > + put_mtd_device(dev->mtd); > out_tr: > module_put(tr->owner); > } > @@ -172,7 +172,7 @@ static int blktrans_release(struct gendisk *disk, fmode_t mode) > > if (!ret) { > dev->mtd->usecount--; > - module_put(dev->mtd->owner); > + put_mtd_device(dev->mtd); > module_put(tr->owner); > } > > -- > 1.6.0.6 > yes this patch solves my problem. Thanks a lot. Regards Holger Brunck
On Fri, 2009-07-10 at 14:50 +0200, Holger Brunck wrote: > > > yes this patch solves my problem. OK, I'll push it to back-port trees then and try to persuade dwmw2 to send it upstresm for 2.6.31 inclusion.
====================================================================== From: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Subject: [PATCH] mtd: blkdevs: do not for get to get MTD devices Nowadays MTD devices have to be "get" before they can be used. This has to be done with 'put_mtd_device()'. The 'blktrans_open()' function did not do this and instead used 'try_module_get()'. Fixe this. Since 'put_mtd_device()' already gets the module, extra 'try_module_get()' is not needed. This fixes oops when one tries to use mtdbloc on tope of gluebi. Reported-by: Holger Brunck <holger.brunck@keymile.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> --- drivers/mtd/mtd_blkdevs.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 1409f01..2f55242 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c @@ -139,7 +139,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode) struct mtd_blktrans_ops *tr = dev->tr; int ret = -ENODEV; - if (!try_module_get(dev->mtd->owner)) + if (!get_mtd_device(NULL, dev->mtd->index)) goto out; if (!try_module_get(tr->owner)) @@ -153,7 +153,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode) ret = 0; if (tr->open && (ret = tr->open(dev))) { dev->mtd->usecount--; - module_put(dev->mtd->owner); + put_mtd_device(dev->mtd); out_tr: module_put(tr->owner); } @@ -172,7 +172,7 @@ static int blktrans_release(struct gendisk *disk, fmode_t mode) if (!ret) { dev->mtd->usecount--; - module_put(dev->mtd->owner); + put_mtd_device(dev->mtd); module_put(tr->owner); }