dm: use bdev_nr_sectors and bdev_nr_bytes instead of open coding them
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Oct 2021 10:11:05 +0000 (12:11 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 20:43:22 +0000 (14:43 -0600)
Use the proper helpers to read the block device size.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Acked-by: Mike Snitzer <snitzer@redhat.com>
Link: https://lore.kernel.org/r/20211018101130.1838532-6-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
22 files changed:
drivers/md/dm-bufio.c
drivers/md/dm-cache-metadata.c
drivers/md/dm-cache-target.c
drivers/md/dm-clone-target.c
drivers/md/dm-dust.c
drivers/md/dm-ebs-target.c
drivers/md/dm-era-target.c
drivers/md/dm-exception-store.h
drivers/md/dm-flakey.c
drivers/md/dm-integrity.c
drivers/md/dm-linear.c
drivers/md/dm-log-writes.c
drivers/md/dm-log.c
drivers/md/dm-mpath.c
drivers/md/dm-raid.c
drivers/md/dm-switch.c
drivers/md/dm-table.c
drivers/md/dm-thin-metadata.c
drivers/md/dm-thin.c
drivers/md/dm-verity-target.c
drivers/md/dm-writecache.c
drivers/md/dm-zoned-target.c

index 50f3e673729c351b3e9173d8303728091bef14b1..104ebc1f08dcc5bf5a14e1af18f1b52ba620a6dd 100644 (file)
@@ -1525,7 +1525,7 @@ EXPORT_SYMBOL_GPL(dm_bufio_get_block_size);
 
 sector_t dm_bufio_get_device_size(struct dm_bufio_client *c)
 {
-       sector_t s = i_size_read(c->bdev->bd_inode) >> SECTOR_SHIFT;
+       sector_t s = bdev_nr_sectors(c->bdev);
        if (s >= c->start)
                s -= c->start;
        else
index 89a73204dbf47f50f918d5ba1bf92aec481a6474..2874f222c31383dc25f3b3ef81c2983a528653d9 100644 (file)
@@ -334,7 +334,7 @@ static int __write_initial_superblock(struct dm_cache_metadata *cmd)
        int r;
        struct dm_block *sblock;
        struct cache_disk_superblock *disk_super;
-       sector_t bdev_size = i_size_read(cmd->bdev->bd_inode) >> SECTOR_SHIFT;
+       sector_t bdev_size = bdev_nr_sectors(cmd->bdev);
 
        /* FIXME: see if we can lose the max sectors limit */
        if (bdev_size > DM_CACHE_METADATA_MAX_SECTORS)
index bdd500447dea2e6382d95f9d42bda0494199ce37..447d030036d18977e3350a7a913103ccf5b1bbb8 100644 (file)
@@ -1940,7 +1940,7 @@ static void cache_dtr(struct dm_target *ti)
 
 static sector_t get_dev_size(struct dm_dev *dev)
 {
-       return i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(dev->bdev);
 }
 
 /*----------------------------------------------------------------*/
index edd22e4d65dffd41d097e8f96d3659303c13425a..4599632d7a84cd51a7cd8d134ca07554e8d25f66 100644 (file)
@@ -1514,7 +1514,7 @@ error:
 
 static sector_t get_dev_size(struct dm_dev *dev)
 {
-       return i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(dev->bdev);
 }
 
 /*---------------------------------------------------------------------------*/
index 3163e2b1418e73b66b28c7df4a68dfa861efe5a5..03672204b0e388cad02c2f97a1c382aeda033f9b 100644 (file)
@@ -415,7 +415,7 @@ static int dust_message(struct dm_target *ti, unsigned int argc, char **argv,
                        char *result, unsigned int maxlen)
 {
        struct dust_device *dd = ti->private;
-       sector_t size = i_size_read(dd->dev->bdev->bd_inode) >> SECTOR_SHIFT;
+       sector_t size = bdev_nr_sectors(dd->dev->bdev);
        bool invalid_msg = false;
        int r = -EINVAL;
        unsigned long long tmp, block;
@@ -544,8 +544,7 @@ static int dust_prepare_ioctl(struct dm_target *ti, struct block_device **bdev)
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (dd->start ||
-           ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT)
+       if (dd->start || ti->len != bdev_nr_sectors(dev->bdev))
                return 1;
 
        return 0;
index d25989660a768217eefd127c2bdef4d1f87f8cbf..7ce5d509b9403a3af68c33936975a1b579981891 100644 (file)
@@ -416,7 +416,7 @@ static int ebs_prepare_ioctl(struct dm_target *ti, struct block_device **bdev)
         * Only pass ioctls through if the device sizes match exactly.
         */
        *bdev = dev->bdev;
-       return !!(ec->start || ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT);
+       return !!(ec->start || ti->len != bdev_nr_sectors(dev->bdev));
 }
 
 static void ebs_io_hints(struct dm_target *ti, struct queue_limits *limits)
index 2a78f687414317588da2d5f484e3557d0d82cc79..1f6bf152b3c74d6573fdc3477f63d15d0874b32e 100644 (file)
@@ -1681,7 +1681,7 @@ static int era_message(struct dm_target *ti, unsigned argc, char **argv,
 
 static sector_t get_dev_size(struct dm_dev *dev)
 {
-       return i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(dev->bdev);
 }
 
 static int era_iterate_devices(struct dm_target *ti,
index 3f4139ac1f602463a452ddacef7cf092c3db6c85..b5f20eba3641501a9076ea71e9e720f690a7e029 100644 (file)
@@ -168,7 +168,7 @@ static inline void dm_consecutive_chunk_count_dec(struct dm_exception *e)
  */
 static inline sector_t get_dev_size(struct block_device *bdev)
 {
-       return i_size_read(bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(bdev);
 }
 
 static inline chunk_t sector_to_chunk(struct dm_exception_store *store,
index 4b94ffe6f2d4ffc3cd6ad105b7eac52061f2b797..345229d7e59c1747fb9b89c672d56c6969c9e799 100644 (file)
@@ -456,8 +456,7 @@ static int flakey_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (fc->start ||
-           ti->len != i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT)
+       if (fc->start || ti->len != bdev_nr_sectors((*bdev)))
                return 1;
        return 0;
 }
index dc03b70f6e65c59e52afe99341838189e10707a3..d0f788e72abf9aed1ebe9a9857392224a641ac8e 100644 (file)
@@ -4113,11 +4113,11 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
                }
        }
 
-       ic->data_device_sectors = i_size_read(ic->dev->bdev->bd_inode) >> SECTOR_SHIFT;
+       ic->data_device_sectors = bdev_nr_sectors(ic->dev->bdev);
        if (!ic->meta_dev)
                ic->meta_device_sectors = ic->data_device_sectors;
        else
-               ic->meta_device_sectors = i_size_read(ic->meta_dev->bdev->bd_inode) >> SECTOR_SHIFT;
+               ic->meta_device_sectors = bdev_nr_sectors(ic->meta_dev->bdev);
 
        if (!journal_sectors) {
                journal_sectors = min((sector_t)DEFAULT_MAX_JOURNAL_SECTORS,
@@ -4367,7 +4367,7 @@ try_smaller_buffer:
        DEBUG_print("   journal_sections %u\n", (unsigned)le32_to_cpu(ic->sb->journal_sections));
        DEBUG_print("   journal_entries %u\n", ic->journal_entries);
        DEBUG_print("   log2_interleave_sectors %d\n", ic->sb->log2_interleave_sectors);
-       DEBUG_print("   data_device_sectors 0x%llx\n", i_size_read(ic->dev->bdev->bd_inode) >> SECTOR_SHIFT);
+       DEBUG_print("   data_device_sectors 0x%llx\n", bdev_nr_sectors(ic->dev->bdev));
        DEBUG_print("   initial_sectors 0x%x\n", ic->initial_sectors);
        DEBUG_print("   metadata_run 0x%x\n", ic->metadata_run);
        DEBUG_print("   log2_metadata_run %d\n", ic->log2_metadata_run);
index 679b4c0a2eea1ed50fc79cce36088f51f9e43b13..66ba16713f696dde918157fd8775a644d8df05bc 100644 (file)
@@ -135,8 +135,7 @@ static int linear_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (lc->start ||
-           ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT)
+       if (lc->start || ti->len != bdev_nr_sectors(dev->bdev))
                return 1;
        return 0;
 }
index d93a4db23512414dd09a5e72f424b53b481d38e8..46de085a9670968b4c0c4d13a4f3c4179d5bbf6f 100644 (file)
@@ -446,7 +446,7 @@ static int log_super(struct log_writes_c *lc)
 
 static inline sector_t logdev_last_sector(struct log_writes_c *lc)
 {
-       return i_size_read(lc->logdev->bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(lc->logdev->bdev);
 }
 
 static int log_writes_kthread(void *arg)
@@ -851,7 +851,7 @@ static int log_writes_prepare_ioctl(struct dm_target *ti,
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT)
+       if (ti->len != bdev_nr_sectors(dev->bdev))
                return 1;
        return 0;
 }
index 1ecf75ef276a4c33225a89a69b820e76e6a197d4..06f328928a7f52948eb3ac0c895cd2014faa503b 100644 (file)
@@ -447,7 +447,7 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,
                                bdev_logical_block_size(lc->header_location.
                                                            bdev));
 
-               if (buf_size > i_size_read(dev->bdev->bd_inode)) {
+               if (buf_size > bdev_nr_bytes(dev->bdev)) {
                        DMWARN("log device %s too small: need %llu bytes",
                                dev->name, (unsigned long long)buf_size);
                        kfree(lc);
index 694aaca4eea24627c4de0a3b1d6c59bae23058c9..5794f5415155d97de1f045e56a1ef26d4f8cc574 100644 (file)
@@ -2061,7 +2061,7 @@ static int multipath_prepare_ioctl(struct dm_target *ti,
        /*
         * Only pass ioctls through if the device sizes match exactly.
         */
-       if (!r && ti->len != i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT)
+       if (!r && ti->len != bdev_nr_sectors((*bdev)))
                return 1;
        return r;
 }
index d9ef52159a22bf6f0288b36acdcc1b0a9f2f5f36..2b26435a6946e8e7f774bf387d0f724ff51a3b96 100644 (file)
@@ -1261,7 +1261,7 @@ static int parse_raid_params(struct raid_set *rs, struct dm_arg_set *as,
                        md_rdev_init(jdev);
                        jdev->mddev = &rs->md;
                        jdev->bdev = rs->journal_dev.dev->bdev;
-                       jdev->sectors = to_sector(i_size_read(jdev->bdev->bd_inode));
+                       jdev->sectors = bdev_nr_sectors(jdev->bdev);
                        if (jdev->sectors < MIN_RAID456_JOURNAL_SPACE) {
                                rs->ti->error = "No space for raid4/5/6 journal";
                                return -ENOSPC;
@@ -1607,7 +1607,7 @@ static int _check_data_dev_sectors(struct raid_set *rs)
 
        rdev_for_each(rdev, &rs->md)
                if (!test_bit(Journal, &rdev->flags) && rdev->bdev) {
-                       ds = min(ds, to_sector(i_size_read(rdev->bdev->bd_inode)));
+                       ds = min(ds, bdev_nr_sectors(rdev->bdev));
                        if (ds < rs->md.dev_sectors) {
                                rs->ti->error = "Component device(s) too small";
                                return -EINVAL;
@@ -2662,7 +2662,7 @@ static int rs_adjust_data_offsets(struct raid_set *rs)
         * Make sure we got a minimum amount of free sectors per device
         */
        if (rs->data_offset &&
-           to_sector(i_size_read(rdev->bdev->bd_inode)) - rs->md.dev_sectors < MIN_FREE_RESHAPE_SPACE) {
+           bdev_nr_sectors(rdev->bdev) - rs->md.dev_sectors < MIN_FREE_RESHAPE_SPACE) {
                rs->ti->error = data_offset ? "No space for forward reshape" :
                                              "No space for backward reshape";
                return -ENOSPC;
index 028a92ff6d5767097fe38f043194a9f37c592f54..534dc2ca8bb0681673f4e20a0cfb56041fccfc5c 100644 (file)
@@ -529,7 +529,7 @@ static int switch_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
         * Only pass ioctls through if the device sizes match exactly.
         */
        if (ti->len + sctx->path_list[path_nr].start !=
-           i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT)
+           bdev_nr_sectors((*bdev)))
                return 1;
        return 0;
 }
index 1fa4d5582dca51e2a6e294ecb54ab43138f2f56b..d95142102bd25558155c01b7a4083ee3629b1f3d 100644 (file)
@@ -227,8 +227,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
 {
        struct queue_limits *limits = data;
        struct block_device *bdev = dev->bdev;
-       sector_t dev_size =
-               i_size_read(bdev->bd_inode) >> SECTOR_SHIFT;
+       sector_t dev_size = bdev_nr_sectors(bdev);
        unsigned short logical_block_size_sectors =
                limits->logical_block_size >> SECTOR_SHIFT;
        char b[BDEVNAME_SIZE];
index c88ed14d49e65219ab2037fcc1b79ad250957488..1a96a07cbf443ace91cd877abb3c26232504cef9 100644 (file)
@@ -549,7 +549,7 @@ static int __write_initial_superblock(struct dm_pool_metadata *pmd)
        int r;
        struct dm_block *sblock;
        struct thin_disk_superblock *disk_super;
-       sector_t bdev_size = i_size_read(pmd->bdev->bd_inode) >> SECTOR_SHIFT;
+       sector_t bdev_size = bdev_nr_sectors(pmd->bdev);
 
        if (bdev_size > THIN_METADATA_MAX_SECTORS)
                bdev_size = THIN_METADATA_MAX_SECTORS;
index 4c67b77c23c1b98fe550f05c3b4b8fbe4c3daac4..ec119d2422d5de8eeb6f0e582c309d1bc3ab116e 100644 (file)
@@ -3212,7 +3212,7 @@ static int metadata_pre_commit_callback(void *context)
 
 static sector_t get_dev_size(struct block_device *bdev)
 {
-       return i_size_read(bdev->bd_inode) >> SECTOR_SHIFT;
+       return bdev_nr_sectors(bdev);
 }
 
 static void warn_if_metadata_device_too_big(struct block_device *bdev)
index aae48a8b1a0489788961de39cf978d12d2783b58..a7efe83aad29a9af1a6b6cd5c4b43532768d7f78 100644 (file)
@@ -834,8 +834,7 @@ static int verity_prepare_ioctl(struct dm_target *ti, struct block_device **bdev
 
        *bdev = v->data_dev->bdev;
 
-       if (v->data_start ||
-           ti->len != i_size_read(v->data_dev->bdev->bd_inode) >> SECTOR_SHIFT)
+       if (v->data_start || ti->len != bdev_nr_sectors(v->data_dev->bdev))
                return 1;
        return 0;
 }
index 18320444fb0a9b71a2bba75fec062a54a0c03f68..017806096b91e8bb26e974b6f96b19ea28bf89cb 100644 (file)
@@ -2341,7 +2341,7 @@ static int writecache_ctr(struct dm_target *ti, unsigned argc, char **argv)
                ti->error = "Cache data device lookup failed";
                goto bad;
        }
-       wc->memory_map_size = i_size_read(wc->ssd_dev->bdev->bd_inode);
+       wc->memory_map_size = bdev_nr_bytes(wc->ssd_dev->bdev);
 
        /*
         * Parse the cache block size
index ae1bc48c0043d517d39e5d17fdd1b54953d438fe..8dc21c09329f246915ded36a182c726b98e08d2e 100644 (file)
@@ -733,7 +733,7 @@ static int dmz_get_zoned_device(struct dm_target *ti, char *path,
        dev->dev_idx = idx;
        (void)bdevname(dev->bdev, dev->name);
 
-       dev->capacity = i_size_read(bdev->bd_inode) >> SECTOR_SHIFT;
+       dev->capacity = bdev_nr_sectors(bdev);
        if (ti->begin) {
                ti->error = "Partial mapping is not supported";
                goto err;