mtd: blktrans: do blk_cleanup_queue when it is really safe to do so
I was calling it in del_mtd_blktrans_dev, but ->request_fn could still be running at that point, thus defer this call to blktrans_dev_release Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
committed by
David Woodhouse
parent
7de6f798e1
commit
e4d64cab99
@@ -32,6 +32,7 @@ void blktrans_dev_release(struct kref *kref)
|
|||||||
container_of(kref, struct mtd_blktrans_dev, ref);
|
container_of(kref, struct mtd_blktrans_dev, ref);
|
||||||
|
|
||||||
dev->disk->private_data = NULL;
|
dev->disk->private_data = NULL;
|
||||||
|
blk_cleanup_queue(dev->rq);
|
||||||
put_disk(dev->disk);
|
put_disk(dev->disk);
|
||||||
list_del(&dev->list);
|
list_del(&dev->list);
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
@@ -423,7 +424,6 @@ int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old)
|
|||||||
old->rq->queuedata = NULL;
|
old->rq->queuedata = NULL;
|
||||||
blk_start_queue(old->rq);
|
blk_start_queue(old->rq);
|
||||||
spin_unlock_irqrestore(&old->queue_lock, flags);
|
spin_unlock_irqrestore(&old->queue_lock, flags);
|
||||||
blk_cleanup_queue(old->rq);
|
|
||||||
|
|
||||||
/* Ask trans driver for release to the mtd device */
|
/* Ask trans driver for release to the mtd device */
|
||||||
mutex_lock(&old->lock);
|
mutex_lock(&old->lock);
|
||||||
|
Reference in New Issue
Block a user