summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2018-02-26 07:01:39 -0500
committerJens Axboe <axboe@kernel.dk>2018-02-26 11:48:42 -0500
commit9df6c29912315186fef1c79cc15b758ace84175b (patch)
treef750cc3053a805b3e2d7b0caac7acd281a64b94a /fs
parent3079c22ea815775837a4f389ce2f7e1e7b202e09 (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.c19
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);
1407static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) 1406static 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);