diff options
Diffstat (limited to 'drivers/md/dm-table.c')
-rw-r--r-- | drivers/md/dm-table.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 2c876ffc63df..9e88ca0c55e9 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
@@ -325,20 +325,13 @@ static int open_dev(struct dm_dev_internal *d, dev_t dev, | |||
325 | 325 | ||
326 | BUG_ON(d->dm_dev.bdev); | 326 | BUG_ON(d->dm_dev.bdev); |
327 | 327 | ||
328 | bdev = open_by_devnum(dev, d->dm_dev.mode); | 328 | bdev = open_by_devnum(dev, d->dm_dev.mode | FMODE_EXCL, _claim_ptr); |
329 | if (IS_ERR(bdev)) | 329 | if (IS_ERR(bdev)) |
330 | return PTR_ERR(bdev); | 330 | return PTR_ERR(bdev); |
331 | 331 | ||
332 | r = bd_claim(bdev, _claim_ptr); | ||
333 | if (r) { | ||
334 | blkdev_put(bdev, d->dm_dev.mode); | ||
335 | return r; | ||
336 | } | ||
337 | |||
338 | r = bd_link_disk_holder(bdev, dm_disk(md)); | 332 | r = bd_link_disk_holder(bdev, dm_disk(md)); |
339 | if (r) { | 333 | if (r) { |
340 | bd_release(bdev); | 334 | blkdev_put(bdev, d->dm_dev.mode | FMODE_EXCL); |
341 | blkdev_put(bdev, d->dm_dev.mode); | ||
342 | return r; | 335 | return r; |
343 | } | 336 | } |
344 | 337 | ||
@@ -354,9 +347,7 @@ static void close_dev(struct dm_dev_internal *d, struct mapped_device *md) | |||
354 | if (!d->dm_dev.bdev) | 347 | if (!d->dm_dev.bdev) |
355 | return; | 348 | return; |
356 | 349 | ||
357 | bd_unlink_disk_holder(d->dm_dev.bdev); | 350 | blkdev_put(d->dm_dev.bdev, d->dm_dev.mode | FMODE_EXCL); |
358 | bd_release(d->dm_dev.bdev); | ||
359 | blkdev_put(d->dm_dev.bdev, d->dm_dev.mode); | ||
360 | d->dm_dev.bdev = NULL; | 351 | d->dm_dev.bdev = NULL; |
361 | } | 352 | } |
362 | 353 | ||