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 /include/linux/mtd | |
| 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 'include/linux/mtd')
| -rw-r--r-- | include/linux/mtd/blktrans.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/mtd/blktrans.h b/include/linux/mtd/blktrans.h index a4b392868b54..d89b8fbba4c9 100644 --- a/include/linux/mtd/blktrans.h +++ b/include/linux/mtd/blktrans.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #define __MTD_TRANS_H__ | 9 | #define __MTD_TRANS_H__ |
| 10 | 10 | ||
| 11 | #include <linux/mutex.h> | 11 | #include <linux/mutex.h> |
| 12 | #include <linux/kref.h> | ||
| 12 | 13 | ||
| 13 | struct hd_geometry; | 14 | struct hd_geometry; |
| 14 | struct mtd_info; | 15 | struct mtd_info; |
| @@ -24,6 +25,8 @@ struct mtd_blktrans_dev { | |||
| 24 | int devnum; | 25 | int devnum; |
| 25 | unsigned long size; | 26 | unsigned long size; |
| 26 | int readonly; | 27 | int readonly; |
| 28 | int open; | ||
| 29 | struct kref ref; | ||
| 27 | struct gendisk *disk; | 30 | struct gendisk *disk; |
| 28 | struct task_struct *thread; | 31 | struct task_struct *thread; |
| 29 | struct request_queue *rq; | 32 | struct request_queue *rq; |
