|
@@ -2185,6 +2185,14 @@ static void mmc_blk_remove_req(struct mmc_blk_data *md)
|
|
|
struct mmc_card *card;
|
|
|
|
|
|
if (md) {
|
|
|
+ /*
|
|
|
+ * Flush remaining requests and free queues. It
|
|
|
+ * is freeing the queue that stops new requests
|
|
|
+ * from being accepted.
|
|
|
+ */
|
|
|
+ mmc_cleanup_queue(&md->queue);
|
|
|
+ if (md->flags & MMC_BLK_PACKED_CMD)
|
|
|
+ mmc_packed_clean(&md->queue);
|
|
|
card = md->queue.card;
|
|
|
if (md->disk->flags & GENHD_FL_UP) {
|
|
|
device_remove_file(disk_to_dev(md->disk), &md->force_ro);
|
|
@@ -2193,14 +2201,8 @@ static void mmc_blk_remove_req(struct mmc_blk_data *md)
|
|
|
device_remove_file(disk_to_dev(md->disk),
|
|
|
&md->power_ro_lock);
|
|
|
|
|
|
- /* Stop new requests from getting into the queue */
|
|
|
del_gendisk(md->disk);
|
|
|
}
|
|
|
-
|
|
|
- /* Then flush out any already in there */
|
|
|
- mmc_cleanup_queue(&md->queue);
|
|
|
- if (md->flags & MMC_BLK_PACKED_CMD)
|
|
|
- mmc_packed_clean(&md->queue);
|
|
|
mmc_blk_put(md);
|
|
|
}
|
|
|
}
|