mtdblock: introduce mtdblks_lock
PATCH 1/1 mtdblock: introduce mtdblks_lock
The mtdblks array and its content are prone to race conditions. Introduce the mutex mtdblks_lock in order to solve this.
--- drivers/mtd/mtdblock.c | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-)
drivers/mtd/mtdblock.c +16 -1
@@ -29,6 +29,8 @@ static struct mtdblk_dev {enum {STATE_EMPTY ,STATE_CLEAN ,STATE_DIRTY } cache_state; } *mtdblks[MAX_MTD_DEVICES ]; +static struct mutex mtdblks_lock; +/* * Cache stuff... *
@@ -270,6 +272,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_open\n" ); +mutex_lock (&mtdblks_lock); +if (mtdblks[dev]) { mtdblks[dev]->count++;return 0 ;
@@ -277,8 +281,10 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)/* OK, it's not open. Create cache info for it */ mtdblk =kzalloc (sizeof (struct mtdblk_dev ),GFP_KERNEL ); -if (!mtdblk) +if (!mtdblk) { +mutex_unlock (&mtdblks_lock);return -ENOMEM ; + } mtdblk->count =1 ; mtdblk->mtd = mtd;
@@ -292,6 +298,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd) mtdblks[dev] = mtdblk; +mutex_unlock (&mtdblks_lock); +DEBUG (MTD_DEBUG_LEVEL1 ,"ok\n" );return 0 ;
@@ -304,6 +312,8 @@ static int mtdblock_release(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_release\n" ); +mutex_lock (&mtdblks_lock); +mutex_lock (&mtdblk->cache_mutex);write_cached_data (mtdblk);mutex_unlock (&mtdblk->cache_mutex);
@@ -316,6 +326,9 @@ static int mtdblock_release(struct mtd_blktrans_dev *mbd)vfree (mtdblk->cache_data);kfree (mtdblk); } + +mutex_unlock (&mtdblks_lock); +DEBUG (MTD_DEBUG_LEVEL1 ,"ok\n" );return 0 ;
@@ -376,6 +389,8 @@ static struct mtd_blktrans_ops mtdblock_tr = {static int __init init_mtdblock (void ) { +mutex_init (&mtdblks_lock); +return register_mtd_blktrans (&mtdblock_tr); }
Signature · 1 line
1.6.3.1
Quoted 6 lines · Matthias Kaehlcke
drivers/mtd/mtdblock.c +2
-0+static struct mutex mtdblks_lock; +/* * Cache stuff... *
drivers/mtd/mtdblock.c static int mtdblock_open(struct mtd_blktrans_dev *mbd) · line 279
Quoted 8 lines
drivers/mtd/mtdblock.c +2
-0@@ -270,6 +272,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_open\n" ); +mutex_lock (&mtdblks_lock); +if (mtdblks[dev]) { mtdblks[dev]->count++;return 0 ;
Now about unlocking the mutex here?
Signature · 2 lines
Best regards, Artem Bityutskiy (Битюцкий Артём)
El Wed, Jul 15, 2009 at 10:41:54AM +0300 Artem Bityutskiy ha dit:
Quoted 10 lines · Matthias Kaehlcke
Quoted 9 lines
drivers/mtd/mtdblock.c +2
-0+static struct mutex mtdblks_lock; +/* * Cache stuff... * @@ -270,6 +272,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_open\n" );
Quoted 7 lines
drivers/mtd/mtdblock.c static int mtdblock_open(struct mtd_blktrans_dev *mbd) · line 279
Quoted 5 lines
drivers/mtd/mtdblock.c +2
-0+mutex_lock (&mtdblks_lock); +if (mtdblks[dev]) { mtdblks[dev]->count++;return 0 ;Now about unlocking the mutex here?
i missed this one ...
thanks for your review. i'm going fix that and send out an updated version of the patch
Signature · 11 lines
Matthias Kaehlcke
Embedded Linux Engineer
Barcelona
They that can give up essential liberty to obtain a little
temporary safety deserve neither liberty nor safety
(Benjamin Franklin)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Quoted 20 lines · Matthias Kaehlcke
El Wed, Jul 15, 2009 at 10:41:54AM +0300 Artem Bityutskiy ha dit:
Quoted 10 lines · Matthias Kaehlcke
Quoted 9 lines
drivers/mtd/mtdblock.c +2
-0+static struct mutex mtdblks_lock; +/* * Cache stuff... * @@ -270,6 +272,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_open\n" );Quoted 7 lines
drivers/mtd/mtdblock.c static int mtdblock_open(struct mtd_blktrans_dev *mbd) · line 279
Quoted 5 lines
drivers/mtd/mtdblock.c +2
-0+mutex_lock (&mtdblks_lock); +if (mtdblks[dev]) { mtdblks[dev]->count++;return 0 ;Now about unlocking the mutex here?
Quoted 4 lines
i missed this one ...
thanks for your review. i'm going fix that and send out an updated version of the patch
Err, I've already amended your patch and put it to my l2-mtd-2.6.git:
http://git.infradead.org/users/dedekind/l2-mtd-2.6.git?a=commit;h=2a4d4fdb6393fdcbfea546b2474baf41d434302a
Signature · 2 lines
Best regards, Artem Bityutskiy (Битюцкий Артём)
El Wed, Jul 15, 2009 at 11:39:22AM +0300 Artem Bityutskiy ha dit:
Quoted 21 lines · Matthias Kaehlcke
Quoted 20 lines
El Wed, Jul 15, 2009 at 10:41:54AM +0300 Artem Bityutskiy ha dit:
Quoted 17 lines · Matthias Kaehlcke
Quoted 6 lines
drivers/mtd/mtdblock.c +2
-0+static struct mutex mtdblks_lock; +/* * Cache stuff... * drivers/mtd/mtdblock.c static int mtdblock_open(struct mtd_blktrans_dev *mbd) · line 279
Quoted 8 lines
drivers/mtd/mtdblock.c +2
-0@@ -270,6 +272,8 @@ static int mtdblock_open(struct mtd_blktrans_dev *mbd)DEBUG (MTD_DEBUG_LEVEL1 ,"mtdblock_open\n" ); +mutex_lock (&mtdblks_lock); +if (mtdblks[dev]) { mtdblks[dev]->count++;return 0 ;Now about unlocking the mutex here?
Quoted 7 lines
Quoted 4 lines
i missed this one ...
thanks for your review. i'm going fix that and send out an updated version of the patch
Err, I've already amended your patch and put it to my l2-mtd-2.6.git:
http://git.infradead.org/users/dedekind/l2-mtd-2.6.git?a=commit;h=2a4d4fdb6393fdcbfea546b2474baf41d434302a
ok, thx!
Signature · 11 lines
Matthias Kaehlcke
Embedded Linux Engineer
Barcelona
If liberty means anything at all, it means the
right to tell people what they do not want to hear
(George Orwell)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-