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>
This commit is contained in:
Maxim Levitsky
2010-02-22 20:39:30 +02:00
committed by David Woodhouse
parent a863862257
commit 048d871995
9 changed files with 148 additions and 59 deletions

View File

@ -9,6 +9,7 @@
#define __MTD_TRANS_H__
#include <linux/mutex.h>
#include <linux/kref.h>
struct hd_geometry;
struct mtd_info;
@ -24,6 +25,8 @@ struct mtd_blktrans_dev {
int devnum;
unsigned long size;
int readonly;
int open;
struct kref ref;
struct gendisk *disk;
struct task_struct *thread;
struct request_queue *rq;