Merge tag 'v3.10.85' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / mtd / mtd_blkdevs.c
index 5073cbc796d86c3a04c4f22d83b01c2f01b1d114..2844f2f6f815b54f4986d34c1f911e1c09ec0f46 100644 (file)
@@ -199,6 +199,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
                return -ERESTARTSYS; /* FIXME: busy loop! -arnd*/
 
        mutex_lock(&dev->lock);
+       mutex_lock(&mtd_table_mutex);
 
        if (dev->open)
                goto unlock;
@@ -222,6 +223,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
 
 unlock:
        dev->open++;
+       mutex_unlock(&mtd_table_mutex);
        mutex_unlock(&dev->lock);
        blktrans_dev_put(dev);
        return ret;
@@ -232,6 +234,7 @@ error_release:
 error_put:
        module_put(dev->tr->owner);
        kref_put(&dev->ref, blktrans_dev_release);
+       mutex_unlock(&mtd_table_mutex);
        mutex_unlock(&dev->lock);
        blktrans_dev_put(dev);
        return ret;
@@ -245,6 +248,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t mode)
                return;
 
        mutex_lock(&dev->lock);
+       mutex_lock(&mtd_table_mutex);
 
        if (--dev->open)
                goto unlock;
@@ -258,6 +262,7 @@ static void blktrans_release(struct gendisk *disk, fmode_t mode)
                __put_mtd_device(dev->mtd);
        }
 unlock:
+       mutex_unlock(&mtd_table_mutex);
        mutex_unlock(&dev->lock);
        blktrans_dev_put(dev);
 }
@@ -405,7 +410,9 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new)
        /* Create the request queue */
        spin_lock_init(&new->queue_lock);
        new->rq = blk_init_queue(mtd_blktrans_request, &new->queue_lock);
-
+#ifdef CONFIG_MTK_MTD_NAND
+               new->rq->backing_dev_info.ra_pages =0;
+#endif
        if (!new->rq)
                goto error3;