aboutsummaryrefslogtreecommitdiffstats
path: root/fs/block_dev.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2006-12-08 02:36:18 -0800
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-08 08:28:39 -0800
commitc48f70c3d046f021b1c22438604ef2a583380eca (patch)
tree88d38aeafa299c15d797cde4a2ef6afd81b82f07 /fs/block_dev.c
parent[PATCH] lockdep: avoid lockdep warning in md (diff)
downloadlinux-dev-c48f70c3d046f021b1c22438604ef2a583380eca.tar.xz
linux-dev-c48f70c3d046f021b1c22438604ef2a583380eca.zip
[PATCH] bdev: fix ->bd_part_count leak
Don't leak a ->bd_part_count when the partition open fails with -ENXIO. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Acked-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/block_dev.c')
-rw-r--r--fs/block_dev.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 846f32d51be7..f3c3a44dd8b6 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -902,6 +902,7 @@ EXPORT_SYMBOL(bd_set_size);
static int __blkdev_get(struct block_device *bdev, mode_t mode, unsigned flags,
int for_part);
+static int __blkdev_put(struct block_device *bdev, int for_part);
static int do_open(struct block_device *bdev, struct file *file, int for_part)
{
@@ -987,7 +988,7 @@ out_first:
bdev->bd_disk = NULL;
bdev->bd_inode->i_data.backing_dev_info = &default_backing_dev_info;
if (bdev != bdev->bd_contains)
- blkdev_put(bdev->bd_contains);
+ __blkdev_put(bdev->bd_contains, 1);
bdev->bd_contains = NULL;
put_disk(disk);
module_put(owner);