diff options
author | Jan Kara <jack@suse.cz> | 2018-02-26 07:01:39 -0500 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-02-26 11:48:42 -0500 |
commit | 9df6c29912315186fef1c79cc15b758ace84175b (patch) | |
tree | f750cc3053a805b3e2d7b0caac7acd281a64b94a /fs | |
parent | 3079c22ea815775837a4f389ce2f7e1e7b202e09 (diff) |
genhd: Add helper put_disk_and_module()
Add a proper counterpart to get_disk_and_module() -
put_disk_and_module(). Currently it is opencoded in several places.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/block_dev.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c index 4a181fcb5175..1dbbf847911a 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -1111,8 +1111,7 @@ static struct block_device *bd_start_claiming(struct block_device *bdev, | |||
1111 | else | 1111 | else |
1112 | whole = bdgrab(bdev); | 1112 | whole = bdgrab(bdev); |
1113 | 1113 | ||
1114 | module_put(disk->fops->owner); | 1114 | put_disk_and_module(disk); |
1115 | put_disk(disk); | ||
1116 | if (!whole) | 1115 | if (!whole) |
1117 | return ERR_PTR(-ENOMEM); | 1116 | return ERR_PTR(-ENOMEM); |
1118 | 1117 | ||
@@ -1407,7 +1406,6 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part); | |||
1407 | static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | 1406 | static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) |
1408 | { | 1407 | { |
1409 | struct gendisk *disk; | 1408 | struct gendisk *disk; |
1410 | struct module *owner; | ||
1411 | int ret; | 1409 | int ret; |
1412 | int partno; | 1410 | int partno; |
1413 | int perm = 0; | 1411 | int perm = 0; |
@@ -1433,7 +1431,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1433 | disk = get_gendisk(bdev->bd_dev, &partno); | 1431 | disk = get_gendisk(bdev->bd_dev, &partno); |
1434 | if (!disk) | 1432 | if (!disk) |
1435 | goto out; | 1433 | goto out; |
1436 | owner = disk->fops->owner; | ||
1437 | 1434 | ||
1438 | disk_block_events(disk); | 1435 | disk_block_events(disk); |
1439 | mutex_lock_nested(&bdev->bd_mutex, for_part); | 1436 | mutex_lock_nested(&bdev->bd_mutex, for_part); |
@@ -1463,8 +1460,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1463 | bdev->bd_queue = NULL; | 1460 | bdev->bd_queue = NULL; |
1464 | mutex_unlock(&bdev->bd_mutex); | 1461 | mutex_unlock(&bdev->bd_mutex); |
1465 | disk_unblock_events(disk); | 1462 | disk_unblock_events(disk); |
1466 | put_disk(disk); | 1463 | put_disk_and_module(disk); |
1467 | module_put(owner); | ||
1468 | goto restart; | 1464 | goto restart; |
1469 | } | 1465 | } |
1470 | } | 1466 | } |
@@ -1525,8 +1521,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1525 | goto out_unlock_bdev; | 1521 | goto out_unlock_bdev; |
1526 | } | 1522 | } |
1527 | /* only one opener holds refs to the module and disk */ | 1523 | /* only one opener holds refs to the module and disk */ |
1528 | put_disk(disk); | 1524 | put_disk_and_module(disk); |
1529 | module_put(owner); | ||
1530 | } | 1525 | } |
1531 | bdev->bd_openers++; | 1526 | bdev->bd_openers++; |
1532 | if (for_part) | 1527 | if (for_part) |
@@ -1546,8 +1541,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) | |||
1546 | out_unlock_bdev: | 1541 | out_unlock_bdev: |
1547 | mutex_unlock(&bdev->bd_mutex); | 1542 | mutex_unlock(&bdev->bd_mutex); |
1548 | disk_unblock_events(disk); | 1543 | disk_unblock_events(disk); |
1549 | put_disk(disk); | 1544 | put_disk_and_module(disk); |
1550 | module_put(owner); | ||
1551 | out: | 1545 | out: |
1552 | bdput(bdev); | 1546 | bdput(bdev); |
1553 | 1547 | ||
@@ -1770,8 +1764,6 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) | |||
1770 | disk->fops->release(disk, mode); | 1764 | disk->fops->release(disk, mode); |
1771 | } | 1765 | } |
1772 | if (!bdev->bd_openers) { | 1766 | if (!bdev->bd_openers) { |
1773 | struct module *owner = disk->fops->owner; | ||
1774 | |||
1775 | disk_put_part(bdev->bd_part); | 1767 | disk_put_part(bdev->bd_part); |
1776 | bdev->bd_part = NULL; | 1768 | bdev->bd_part = NULL; |
1777 | bdev->bd_disk = NULL; | 1769 | bdev->bd_disk = NULL; |
@@ -1779,8 +1771,7 @@ static void __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) | |||
1779 | victim = bdev->bd_contains; | 1771 | victim = bdev->bd_contains; |
1780 | bdev->bd_contains = NULL; | 1772 | bdev->bd_contains = NULL; |
1781 | 1773 | ||
1782 | put_disk(disk); | 1774 | put_disk_and_module(disk); |
1783 | module_put(owner); | ||
1784 | } | 1775 | } |
1785 | mutex_unlock(&bdev->bd_mutex); | 1776 | mutex_unlock(&bdev->bd_mutex); |
1786 | bdput(bdev); | 1777 | bdput(bdev); |