]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/mtd/mtd_blkdevs.c
Merge tag 'drm-intel-next-fixes-2015-07-02' of git://anongit.freedesktop.org/drm...
[mirror_ubuntu-bionic-kernel.git] / drivers / mtd / mtd_blkdevs.c
index 2b0c528709997a618d672e55c50bb44336a8cd69..41acc507b22ed942bee2f0df6f43dda073efeb99 100644 (file)
@@ -197,6 +197,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;
@@ -220,6 +221,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;
@@ -230,6 +232,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;
@@ -243,6 +246,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;
@@ -256,6 +260,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);
 }
@@ -273,7 +278,7 @@ static int blktrans_getgeo(struct block_device *bdev, struct hd_geometry *geo)
        if (!dev->mtd)
                goto unlock;
 
-       ret = dev->tr->getgeo ? dev->tr->getgeo(dev, geo) : 0;
+       ret = dev->tr->getgeo ? dev->tr->getgeo(dev, geo) : -ENOTTY;
 unlock:
        mutex_unlock(&dev->lock);
        blktrans_dev_put(dev);