diff options
author | Maxim Levitsky <maximlevitsky@gmail.com> | 2010-02-22 13:39:30 -0500 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2010-02-26 12:05:26 -0500 |
commit | 048d87199566663e4edc4880df3703c04bcf41d9 (patch) | |
tree | da875d4f7802d6ca8a7db9f2cdba57b74d6c3672 /drivers/mtd/mtdblock.c | |
parent | a863862257b7dd08d855bafcb0aedd9ad848ed91 (diff) |
mtd: blktrans: Hotplug fixes
* Add locking where it was missing.
* Don't do a get_mtd_device in blktrans_open because it would lead to a
deadlock; instead do that in add_mtd_blktrans_dev.
* Only free the mtd_blktrans_dev structure when the last user exits.
* Flush request queue on device removal.
* Track users, and call tr->release in del_mtd_blktrans_dev
Due to that ->open and release aren't called more that once.
Now it is safe to call del_mtd_blktrans_dev while the device is still in use.
Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/mtdblock.c')
-rw-r--r-- | drivers/mtd/mtdblock.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/drivers/mtd/mtdblock.c b/drivers/mtd/mtdblock.c index 69f6bf2e0a8c..8e5da1e46076 100644 --- a/drivers/mtd/mtdblock.c +++ b/drivers/mtd/mtdblock.c | |||
@@ -354,9 +354,7 @@ static void mtdblock_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd) | |||
354 | static void mtdblock_remove_dev(struct mtd_blktrans_dev *dev) | 354 | static void mtdblock_remove_dev(struct mtd_blktrans_dev *dev) |
355 | { | 355 | { |
356 | struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd); | 356 | struct mtdblk_dev *mtdblk = container_of(dev, struct mtdblk_dev, mbd); |
357 | |||
358 | del_mtd_blktrans_dev(dev); | 357 | del_mtd_blktrans_dev(dev); |
359 | kfree(mtdblk); | ||
360 | } | 358 | } |
361 | 359 | ||
362 | static struct mtd_blktrans_ops mtdblock_tr = { | 360 | static struct mtd_blktrans_ops mtdblock_tr = { |