]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/block_dev.c
hwmon: (lm75) Drop legacy i2c driver
[linux-2.6-omap-h63xx.git] / fs / block_dev.c
index 470c10ceb0fb3a33dc8f28e7e8b2d3535042075b..aff54219e04953386162690941d7e412f3a29c64 100644 (file)
@@ -271,7 +271,7 @@ static void bdev_destroy_inode(struct inode *inode)
        kmem_cache_free(bdev_cachep, bdi);
 }
 
-static void init_once(struct kmem_cache * cachep, void *foo)
+static void init_once(void *foo)
 {
        struct bdev_inode *ei = (struct bdev_inode *) foo;
        struct block_device *bdev = &ei->bdev;
@@ -931,10 +931,20 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part)
        struct gendisk *disk;
        int ret;
        int part;
+       int perm = 0;
 
-       ret = devcgroup_inode_permission(bdev->bd_inode, file->f_mode);
-       if (ret != 0)
+       if (file->f_mode & FMODE_READ)
+               perm |= MAY_READ;
+       if (file->f_mode & FMODE_WRITE)
+               perm |= MAY_WRITE;
+       /*
+        * hooks: /n/, see "layering violations".
+        */
+       ret = devcgroup_inode_permission(bdev->bd_inode, perm);
+       if (ret != 0) {
+               bdput(bdev);
                return ret;
+       }
 
        ret = -ENXIO;
        file->f_mapping = bdev->bd_inode->i_mapping;
@@ -1226,6 +1236,7 @@ fail:
        bdev = ERR_PTR(error);
        goto out;
 }
+EXPORT_SYMBOL(lookup_bdev);
 
 /**
  * open_bdev_excl  -  open a block device by name and set it up for use