block: remove the bd_bdi in struct block_device
authorChristoph Hellwig <hch@lst.de>
Mon, 9 Aug 2021 14:17:44 +0000 (16:17 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 9 Aug 2021 17:53:26 +0000 (11:53 -0600)
Just retrieve the bdi from the disk.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20210809141744.1203023-6-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/ioctl.c
fs/block_dev.c
fs/nilfs2/super.c
fs/super.c
fs/xfs/xfs_buf.c
include/linux/backing-dev.h
include/linux/blk_types.h

index 0c3a4a5..fff161e 100644 (file)
@@ -506,7 +506,7 @@ static int blkdev_common_ioctl(struct block_device *bdev, fmode_t mode,
        case BLKFRASET:
                if(!capable(CAP_SYS_ADMIN))
                        return -EACCES;
-               bdev->bd_bdi->ra_pages = (arg * 512) / PAGE_SIZE;
+               bdev->bd_disk->bdi->ra_pages = (arg * 512) / PAGE_SIZE;
                return 0;
        case BLKRRPART:
                return blkdev_reread_part(bdev, mode);
@@ -556,7 +556,8 @@ int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
        case BLKFRAGET:
                if (!argp)
                        return -EINVAL;
-               return put_long(argp, (bdev->bd_bdi->ra_pages*PAGE_SIZE) / 512);
+               return put_long(argp,
+                       (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512);
        case BLKGETSIZE:
                size = i_size_read(bdev->bd_inode);
                if ((size >> 9) > ~0UL)
@@ -628,7 +629,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
                if (!argp)
                        return -EINVAL;
                return compat_put_long(argp,
-                              (bdev->bd_bdi->ra_pages * PAGE_SIZE) / 512);
+                       (bdev->bd_disk->bdi->ra_pages * PAGE_SIZE) / 512);
        case BLKGETSIZE:
                size = i_size_read(bdev->bd_inode);
                if ((size >> 9) > ~0UL)
index 43be546..e1c14c2 100644 (file)
@@ -801,7 +801,6 @@ static struct inode *bdev_alloc_inode(struct super_block *sb)
        if (!ei)
                return NULL;
        memset(&ei->bdev, 0, sizeof(ei->bdev));
-       ei->bdev.bd_bdi = &noop_backing_dev_info;
        return &ei->vfs_inode;
 }
 
@@ -826,16 +825,11 @@ static void init_once(void *data)
 
 static void bdev_evict_inode(struct inode *inode)
 {
-       struct block_device *bdev = &BDEV_I(inode)->bdev;
        truncate_inode_pages_final(&inode->i_data);
        invalidate_inode_buffers(inode); /* is it needed here? */
        clear_inode(inode);
        /* Detach inode from wb early as bdi_put() may free bdi->wb */
        inode_detach_wb(inode);
-       if (bdev->bd_bdi != &noop_backing_dev_info) {
-               bdi_put(bdev->bd_bdi);
-               bdev->bd_bdi = &noop_backing_dev_info;
-       }
 }
 
 static const struct super_operations bdev_sops = {
@@ -1084,11 +1078,8 @@ static int blkdev_get_whole(struct block_device *bdev, fmode_t mode)
                }
        }
 
-       if (!bdev->bd_openers) {
+       if (!bdev->bd_openers)
                set_init_blocksize(bdev);
-               if (bdev->bd_bdi == &noop_backing_dev_info)
-                       bdev->bd_bdi = bdi_get(disk->bdi);
-       }
        if (test_bit(GD_NEED_PART_SCAN, &disk->state))
                bdev_disk_changed(disk, false);
        bdev->bd_openers++;
@@ -1121,8 +1112,6 @@ static int blkdev_get_part(struct block_device *part, fmode_t mode)
 
        disk->open_partitions++;
        set_init_blocksize(part);
-       if (part->bd_bdi == &noop_backing_dev_info)
-               part->bd_bdi = bdi_get(disk->bdi);
 done:
        part->bd_openers++;
        return 0;
index 4abd928..f6b2d28 100644 (file)
@@ -1053,7 +1053,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
        sb->s_time_gran = 1;
        sb->s_max_links = NILFS_LINK_MAX;
 
-       sb->s_bdi = bdi_get(sb->s_bdev->bd_bdi);
+       sb->s_bdi = bdi_get(sb->s_bdev->bd_disk->bdi);
 
        err = load_nilfs(nilfs, sb);
        if (err)
index 91b7f15..bcef3a6 100644 (file)
@@ -1203,7 +1203,7 @@ static int set_bdev_super(struct super_block *s, void *data)
 {
        s->s_bdev = data;
        s->s_dev = s->s_bdev->bd_dev;
-       s->s_bdi = bdi_get(s->s_bdev->bd_bdi);
+       s->s_bdi = bdi_get(s->s_bdev->bd_disk->bdi);
 
        if (blk_queue_stable_writes(s->s_bdev->bd_disk->queue))
                s->s_iflags |= SB_I_STABLE_WRITES;
index 8ff42b3..3ab7356 100644 (file)
@@ -844,7 +844,7 @@ xfs_buf_readahead_map(
 {
        struct xfs_buf          *bp;
 
-       if (bdi_read_congested(target->bt_bdev->bd_bdi))
+       if (bdi_read_congested(target->bt_bdev->bd_disk->bdi))
                return;
 
        xfs_buf_read_map(target, map, nmaps,
index 44df4fc..2953085 100644 (file)
@@ -143,7 +143,7 @@ static inline struct backing_dev_info *inode_to_bdi(struct inode *inode)
        sb = inode->i_sb;
 #ifdef CONFIG_BLOCK
        if (sb_is_blkdev_sb(sb))
-               return I_BDEV(inode)->bd_bdi;
+               return I_BDEV(inode)->bd_disk->bdi;
 #endif
        return sb->s_bdi;
 }
index e927356..1335efa 100644 (file)
@@ -38,7 +38,6 @@ struct block_device {
        u8                      bd_partno;
        spinlock_t              bd_size_lock; /* for bd_inode->i_size updates */
        struct gendisk *        bd_disk;
-       struct backing_dev_info *bd_bdi;
 
        /* The counter of freeze processes */
        int                     bd_fsfreeze_count;