mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
set_blocksize(): switch to passing struct file *
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
b85c42981a
commit
ead083aeee
11
block/bdev.c
11
block/bdev.c
@ -144,8 +144,11 @@ static void set_init_blocksize(struct block_device *bdev)
|
||||
bdev->bd_inode->i_blkbits = blksize_bits(bsize);
|
||||
}
|
||||
|
||||
int set_blocksize(struct block_device *bdev, int size)
|
||||
int set_blocksize(struct file *file, int size)
|
||||
{
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
struct block_device *bdev = I_BDEV(inode);
|
||||
|
||||
/* Size must be a power of two, and between 512 and PAGE_SIZE */
|
||||
if (size > PAGE_SIZE || size < 512 || !is_power_of_2(size))
|
||||
return -EINVAL;
|
||||
@ -155,9 +158,9 @@ int set_blocksize(struct block_device *bdev, int size)
|
||||
return -EINVAL;
|
||||
|
||||
/* Don't change the size if it is same as current */
|
||||
if (bdev->bd_inode->i_blkbits != blksize_bits(size)) {
|
||||
if (inode->i_blkbits != blksize_bits(size)) {
|
||||
sync_blockdev(bdev);
|
||||
bdev->bd_inode->i_blkbits = blksize_bits(size);
|
||||
inode->i_blkbits = blksize_bits(size);
|
||||
kill_bdev(bdev);
|
||||
}
|
||||
return 0;
|
||||
@ -167,7 +170,7 @@ EXPORT_SYMBOL(set_blocksize);
|
||||
|
||||
int sb_set_blocksize(struct super_block *sb, int size)
|
||||
{
|
||||
if (set_blocksize(sb->s_bdev, size))
|
||||
if (set_blocksize(sb->s_bdev_file, size))
|
||||
return 0;
|
||||
/* If we get here, we know size is power of two
|
||||
* and it's value is between 512 and PAGE_SIZE */
|
||||
|
@ -473,11 +473,14 @@ static int compat_hdio_getgeo(struct block_device *bdev,
|
||||
#endif
|
||||
|
||||
/* set the logical block size */
|
||||
static int blkdev_bszset(struct block_device *bdev, blk_mode_t mode,
|
||||
static int blkdev_bszset(struct file *file, blk_mode_t mode,
|
||||
int __user *argp)
|
||||
{
|
||||
// this one might be file_inode(file)->i_rdev - a rare valid
|
||||
// use of file_inode() for those.
|
||||
dev_t dev = I_BDEV(file->f_mapping->host)->bd_dev;
|
||||
struct file *excl_file;
|
||||
int ret, n;
|
||||
struct file *file;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EACCES;
|
||||
@ -487,13 +490,13 @@ static int blkdev_bszset(struct block_device *bdev, blk_mode_t mode,
|
||||
return -EFAULT;
|
||||
|
||||
if (mode & BLK_OPEN_EXCL)
|
||||
return set_blocksize(bdev, n);
|
||||
return set_blocksize(file, n);
|
||||
|
||||
file = bdev_file_open_by_dev(bdev->bd_dev, mode, &bdev, NULL);
|
||||
if (IS_ERR(file))
|
||||
excl_file = bdev_file_open_by_dev(dev, mode, &dev, NULL);
|
||||
if (IS_ERR(excl_file))
|
||||
return -EBUSY;
|
||||
ret = set_blocksize(bdev, n);
|
||||
fput(file);
|
||||
ret = set_blocksize(excl_file, n);
|
||||
fput(excl_file);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -621,7 +624,7 @@ long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
case BLKBSZGET: /* get block device soft block size (cf. BLKSSZGET) */
|
||||
return put_int(argp, block_size(bdev));
|
||||
case BLKBSZSET:
|
||||
return blkdev_bszset(bdev, mode, argp);
|
||||
return blkdev_bszset(file, mode, argp);
|
||||
case BLKGETSIZE64:
|
||||
return put_u64(argp, bdev_nr_bytes(bdev));
|
||||
|
||||
@ -681,7 +684,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
||||
case BLKBSZGET_32: /* get the logical block size (cf. BLKSSZGET) */
|
||||
return put_int(argp, bdev_logical_block_size(bdev));
|
||||
case BLKBSZSET_32:
|
||||
return blkdev_bszset(bdev, mode, argp);
|
||||
return blkdev_bszset(file, mode, argp);
|
||||
case BLKGETSIZE64_32:
|
||||
return put_u64(argp, bdev_nr_bytes(bdev));
|
||||
|
||||
|
@ -2215,7 +2215,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, bool write)
|
||||
}
|
||||
dev_info(ddev, "%lukB available on disc\n", lba << 1);
|
||||
}
|
||||
set_blocksize(file_bdev(bdev_file), CD_FRAMESIZE);
|
||||
set_blocksize(bdev_file, CD_FRAMESIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -316,7 +316,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info,
|
||||
set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
|
||||
set_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
|
||||
device->dev_stats_valid = 1;
|
||||
set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE);
|
||||
set_blocksize(bdev_file, BTRFS_BDEV_BLOCKSIZE);
|
||||
device->fs_devices = fs_devices;
|
||||
|
||||
ret = btrfs_get_dev_zone_info(device, false);
|
||||
|
@ -483,7 +483,7 @@ btrfs_get_bdev_and_sb(const char *device_path, blk_mode_t flags, void *holder,
|
||||
if (flush)
|
||||
sync_blockdev(bdev);
|
||||
if (holder) {
|
||||
ret = set_blocksize(bdev, BTRFS_BDEV_BLOCKSIZE);
|
||||
ret = set_blocksize(*bdev_file, BTRFS_BDEV_BLOCKSIZE);
|
||||
if (ret) {
|
||||
fput(*bdev_file);
|
||||
goto error;
|
||||
@ -2717,7 +2717,7 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path
|
||||
set_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state);
|
||||
clear_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state);
|
||||
device->dev_stats_valid = 1;
|
||||
set_blocksize(device->bdev, BTRFS_BDEV_BLOCKSIZE);
|
||||
set_blocksize(device->bdev_file, BTRFS_BDEV_BLOCKSIZE);
|
||||
|
||||
if (seeding_dev) {
|
||||
btrfs_clear_sb_rdonly(sb);
|
||||
|
@ -5873,7 +5873,7 @@ static struct file *ext4_get_journal_blkdev(struct super_block *sb,
|
||||
|
||||
sb_block = EXT4_MIN_BLOCK_SIZE / blocksize;
|
||||
offset = EXT4_MIN_BLOCK_SIZE % blocksize;
|
||||
set_blocksize(bdev, blocksize);
|
||||
set_blocksize(bdev_file, blocksize);
|
||||
bh = __bread(bdev, sb_block, blocksize);
|
||||
if (!bh) {
|
||||
ext4_msg(sb, KERN_ERR, "couldn't read superblock of "
|
||||
|
@ -2626,8 +2626,7 @@ static int journal_init_dev(struct super_block *super,
|
||||
MAJOR(jdev), MINOR(jdev), result);
|
||||
return result;
|
||||
} else if (jdev != super->s_dev)
|
||||
set_blocksize(file_bdev(journal->j_bdev_file),
|
||||
super->s_blocksize);
|
||||
set_blocksize(journal->j_bdev_file, super->s_blocksize);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2643,7 +2642,7 @@ static int journal_init_dev(struct super_block *super,
|
||||
return result;
|
||||
}
|
||||
|
||||
set_blocksize(file_bdev(journal->j_bdev_file), super->s_blocksize);
|
||||
set_blocksize(journal->j_bdev_file, super->s_blocksize);
|
||||
reiserfs_info(super,
|
||||
"journal_init_dev: journal device: %pg\n",
|
||||
file_bdev(journal->j_bdev_file));
|
||||
|
@ -2043,7 +2043,7 @@ xfs_setsize_buftarg(
|
||||
btp->bt_meta_sectorsize = sectorsize;
|
||||
btp->bt_meta_sectormask = sectorsize - 1;
|
||||
|
||||
if (set_blocksize(btp->bt_bdev, sectorsize)) {
|
||||
if (set_blocksize(btp->bt_bdev_file, sectorsize)) {
|
||||
xfs_warn(btp->bt_mount,
|
||||
"Cannot set_blocksize to %u on device %pg",
|
||||
sectorsize, btp->bt_bdev);
|
||||
|
@ -1474,7 +1474,7 @@ static inline void bio_end_io_acct(struct bio *bio, unsigned long start_time)
|
||||
}
|
||||
|
||||
int bdev_read_only(struct block_device *bdev);
|
||||
int set_blocksize(struct block_device *bdev, int size);
|
||||
int set_blocksize(struct file *file, int size);
|
||||
|
||||
int lookup_bdev(const char *pathname, dev_t *dev);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user