[PATCH] fix bdev leak in block_dev.c do_open()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 1 Aug 2008 09:32:04 +0000 (05:32 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 1 Aug 2008 15:25:26 +0000 (11:25 -0400)
Callers expect it to drop reference to bdev on all failure exits.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/block_dev.c

index dcf37cada3697d898c2d0c70c875450826845440..e664b0b7048916954a82293e7fc7f4d231ae8514 100644 (file)
@@ -941,8 +941,10 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part)
         * hooks: /n/, see "layering violations".
         */
        ret = devcgroup_inode_permission(bdev->bd_inode, perm);
-       if (ret != 0)
+       if (ret != 0) {
+               bdput(bdev);
                return ret;
+       }
 
        ret = -ENXIO;
        file->f_mapping = bdev->bd_inode->i_mapping;