From 93677f098d3b794ede27d4de24e3c389b611070f Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Mon, 13 Jun 2011 12:45:48 +0200 Subject: [PATCH] --- yaml --- r: 254006 b: refs/heads/master c: d4c208b86b8be4254eba0e74071496e599f94639 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/block_dev.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 16f3c97ef272..2f0a728984c5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 08e8138adebdd511e0955e8d6c051904bb4082af +refs/heads/master: d4c208b86b8be4254eba0e74071496e599f94639 diff --git a/trunk/fs/block_dev.c b/trunk/fs/block_dev.c index 1a2421f908f0..610e8e0b04b8 100644 --- a/trunk/fs/block_dev.c +++ b/trunk/fs/block_dev.c @@ -762,7 +762,19 @@ static struct block_device *bd_start_claiming(struct block_device *bdev, if (!disk) return ERR_PTR(-ENXIO); - whole = bdget_disk(disk, 0); + /* + * Normally, @bdev should equal what's returned from bdget_disk() + * if partno is 0; however, some drivers (floppy) use multiple + * bdev's for the same physical device and @bdev may be one of the + * aliases. Keep @bdev if partno is 0. This means claimer + * tracking is broken for those devices but it has always been that + * way. + */ + if (partno) + whole = bdget_disk(disk, 0); + else + whole = bdgrab(bdev); + module_put(disk->fops->owner); put_disk(disk); if (!whole)