mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
Merge tag 'for-5.16/bdev-size-2021-10-29' of git://git.kernel.dk/linux-block
Pull bdev size cleanups from Jens Axboe: "Clean up the bdev size handling with new bdev_nr_bytes() helper" * tag 'for-5.16/bdev-size-2021-10-29' of git://git.kernel.dk/linux-block: (34 commits) partitions/ibm: use bdev_nr_sectors instead of open coding it partitions/efi: use bdev_nr_bytes instead of open coding it block/ioctl: use bdev_nr_sectors and bdev_nr_bytes block: cache inode size in bdev udf: use sb_bdev_nr_blocks reiserfs: use sb_bdev_nr_blocks ntfs: use sb_bdev_nr_blocks jfs: use sb_bdev_nr_blocks ext4: use sb_bdev_nr_blocks block: add a sb_bdev_nr_blocks helper block: use bdev_nr_bytes instead of open coding it in blkdev_fallocate squashfs: use bdev_nr_bytes instead of open coding it reiserfs: use bdev_nr_bytes instead of open coding it pstore/blk: use bdev_nr_bytes instead of open coding it ntfs3: use bdev_nr_bytes instead of open coding it nilfs2: use bdev_nr_bytes instead of open coding it nfs/blocklayout: use bdev_nr_bytes instead of open coding it jfs: use bdev_nr_bytes instead of open coding it hfsplus: use bdev_nr_sectors instead of open coding it hfs: use bdev_nr_sectors instead of open coding it ...
This commit is contained in:
@@ -91,6 +91,7 @@ static void bdev_set_nr_sectors(struct block_device *bdev, sector_t sectors)
|
||||
{
|
||||
spin_lock(&bdev->bd_size_lock);
|
||||
i_size_write(bdev->bd_inode, (loff_t)sectors << SECTOR_SHIFT);
|
||||
bdev->bd_nr_sectors = sectors;
|
||||
spin_unlock(&bdev->bd_size_lock);
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ efi_crc32(const void *buf, unsigned long len)
|
||||
*/
|
||||
static u64 last_lba(struct gendisk *disk)
|
||||
{
|
||||
return div_u64(disk->part0->bd_inode->i_size,
|
||||
return div_u64(bdev_nr_bytes(disk->part0),
|
||||
queue_logical_block_size(disk->queue)) - 1ULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ static int find_lnx1_partitions(struct parsed_partitions *state,
|
||||
char name[],
|
||||
union label_t *label,
|
||||
sector_t labelsect,
|
||||
loff_t i_size,
|
||||
sector_t nr_sectors,
|
||||
dasd_information2_t *info)
|
||||
{
|
||||
loff_t offset, geo_size, size;
|
||||
@@ -213,14 +213,14 @@ static int find_lnx1_partitions(struct parsed_partitions *state,
|
||||
} else {
|
||||
/*
|
||||
* Formated w/o large volume support. If the sanity check
|
||||
* 'size based on geo == size based on i_size' is true, then
|
||||
* 'size based on geo == size based on nr_sectors' is true, then
|
||||
* we can safely assume that we know the formatted size of
|
||||
* the disk, otherwise we need additional information
|
||||
* that we can only get from a real DASD device.
|
||||
*/
|
||||
geo_size = geo->cylinders * geo->heads
|
||||
* geo->sectors * secperblk;
|
||||
size = i_size >> 9;
|
||||
size = nr_sectors;
|
||||
if (size != geo_size) {
|
||||
if (!info) {
|
||||
strlcat(state->pp_buf, "\n", PAGE_SIZE);
|
||||
@@ -229,7 +229,7 @@ static int find_lnx1_partitions(struct parsed_partitions *state,
|
||||
if (!strcmp(info->type, "ECKD"))
|
||||
if (geo_size < size)
|
||||
size = geo_size;
|
||||
/* else keep size based on i_size */
|
||||
/* else keep size based on nr_sectors */
|
||||
}
|
||||
}
|
||||
/* first and only partition starts in the first block after the label */
|
||||
@@ -293,7 +293,8 @@ int ibm_partition(struct parsed_partitions *state)
|
||||
struct gendisk *disk = state->disk;
|
||||
struct block_device *bdev = disk->part0;
|
||||
int blocksize, res;
|
||||
loff_t i_size, offset, size;
|
||||
loff_t offset, size;
|
||||
sector_t nr_sectors;
|
||||
dasd_information2_t *info;
|
||||
struct hd_geometry *geo;
|
||||
char type[5] = {0,};
|
||||
@@ -308,8 +309,8 @@ int ibm_partition(struct parsed_partitions *state)
|
||||
blocksize = bdev_logical_block_size(bdev);
|
||||
if (blocksize <= 0)
|
||||
goto out_symbol;
|
||||
i_size = i_size_read(bdev->bd_inode);
|
||||
if (i_size == 0)
|
||||
nr_sectors = bdev_nr_sectors(bdev);
|
||||
if (nr_sectors == 0)
|
||||
goto out_symbol;
|
||||
info = kmalloc(sizeof(dasd_information2_t), GFP_KERNEL);
|
||||
if (info == NULL)
|
||||
@@ -336,7 +337,7 @@ int ibm_partition(struct parsed_partitions *state)
|
||||
label);
|
||||
} else if (!strncmp(type, "LNX1", 4)) {
|
||||
res = find_lnx1_partitions(state, geo, blocksize, name,
|
||||
label, labelsect, i_size,
|
||||
label, labelsect, nr_sectors,
|
||||
info);
|
||||
} else if (!strncmp(type, "CMS1", 4)) {
|
||||
res = find_cms1_partitions(state, geo, blocksize, name,
|
||||
@@ -353,7 +354,7 @@ int ibm_partition(struct parsed_partitions *state)
|
||||
res = 1;
|
||||
if (info->format == DASD_FORMAT_LDL) {
|
||||
strlcat(state->pp_buf, "(nonl)", PAGE_SIZE);
|
||||
size = i_size >> 9;
|
||||
size = nr_sectors;
|
||||
offset = (info->label_block + 1) * (blocksize >> 9);
|
||||
put_partition(state, 1, offset, size-offset);
|
||||
strlcat(state->pp_buf, "\n", PAGE_SIZE);
|
||||
|
||||
Reference in New Issue
Block a user