mtd: blktrans: do blk_cleanup_queue when it is really safe to do so
authorMaxim Levitsky <maximlevitsky@gmail.com>
Sat, 27 Feb 2010 00:31:51 +0000 (02:31 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Tue, 9 Mar 2010 02:57:42 +0000 (18:57 -0800)
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>
drivers/mtd/mtd_blkdevs.c

index e32c49c..03e19c1 100644 (file)
@@ -32,6 +32,7 @@ void blktrans_dev_release(struct kref *kref)
                container_of(kref, struct mtd_blktrans_dev, ref);
 
        dev->disk->private_data = NULL;
+       blk_cleanup_queue(dev->rq);
        put_disk(dev->disk);
        list_del(&dev->list);
        kfree(dev);
@@ -423,7 +424,6 @@ int del_mtd_blktrans_dev(struct mtd_blktrans_dev *old)
        old->rq->queuedata = NULL;
        blk_start_queue(old->rq);
        spin_unlock_irqrestore(&old->queue_lock, flags);
-       blk_cleanup_queue(old->rq);
 
        /* Ask trans driver for release to the mtd device */
        mutex_lock(&old->lock);