2023-11-27 06:22:26

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 00/16] block: remove field 'bd_inode' from block_device

From: Yu Kuai <[email protected]>

Changes in v2:
- split different portions into different patches, as greg k-h
suggested.
- use container_of() instead of "bdev + 1" to get the address of
bd_inode in the new helper, as grep k-h suggested.

Yu Kuai (16):
block: add a new helper to get inode from block_device
xen/blkback: use new helper to get inode from block_device
bcache: use new helper to get inode from block_device
mtd: block2mtd: use new helper to get inode from block_device
s390/dasd: use new helper to get inode from block_device
scsicam: use new helper to get inode from block_device
bcachefs: use new helper to get inode from block_device
btrfs: use new helper to get inode from block_device
cramfs: use new helper to get inode from block_device
erofs: use new helper to get inode from block_device
ext4: use new helper to get inode from block_device
gfs2: use new helper to get inode from block_device
jbd2: use new helper to get inode from block_device
nilfs2: use new helper to get inode from block_device
buffer: use new helper to get inode from block_device
block: use new helper to get inode from block_device

block/bdev.c | 44 +++++++++++++++---------------
block/blk-zoned.c | 4 +--
block/fops.c | 4 +--
block/genhd.c | 8 +++---
block/ioctl.c | 8 +++---
block/partitions/core.c | 9 +++---
drivers/block/xen-blkback/xenbus.c | 2 +-
drivers/md/bcache/super.c | 2 +-
drivers/mtd/devices/block2mtd.c | 12 ++++----
drivers/s390/block/dasd_ioctl.c | 2 +-
drivers/scsi/scsicam.c | 2 +-
fs/bcachefs/util.h | 2 +-
fs/btrfs/disk-io.c | 6 ++--
fs/btrfs/volumes.c | 4 +--
fs/btrfs/zoned.c | 2 +-
fs/buffer.c | 8 +++---
fs/cramfs/inode.c | 2 +-
fs/erofs/data.c | 2 +-
fs/ext4/dir.c | 2 +-
fs/ext4/ext4_jbd2.c | 2 +-
fs/ext4/super.c | 8 +++---
fs/gfs2/glock.c | 2 +-
fs/gfs2/ops_fstype.c | 2 +-
fs/jbd2/journal.c | 3 +-
fs/jbd2/recovery.c | 2 +-
fs/nilfs2/segment.c | 2 +-
include/linux/blk_types.h | 15 ++++++++--
include/linux/blkdev.h | 4 +--
include/linux/buffer_head.h | 4 +--
29 files changed, 91 insertions(+), 78 deletions(-)

--
2.39.2


2023-11-27 06:22:26

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 04/16] mtd: block2mtd: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
drivers/mtd/devices/block2mtd.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
index aa44a23ec045..d4f7a4339a70 100644
--- a/drivers/mtd/devices/block2mtd.c
+++ b/drivers/mtd/devices/block2mtd.c
@@ -56,7 +56,7 @@ static struct page *page_read(struct address_space *mapping, pgoff_t index)
static int _block2mtd_erase(struct block2mtd_dev *dev, loff_t to, size_t len)
{
struct address_space *mapping =
- dev->bdev_handle->bdev->bd_inode->i_mapping;
+ bdev_inode(dev->bdev_handle->bdev)->i_mapping;
struct page *page;
pgoff_t index = to >> PAGE_SHIFT; // page index
int pages = len >> PAGE_SHIFT;
@@ -107,7 +107,7 @@ static int block2mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
{
struct block2mtd_dev *dev = mtd->priv;
struct address_space *mapping =
- dev->bdev_handle->bdev->bd_inode->i_mapping;
+ bdev_inode(dev->bdev_handle->bdev)->i_mapping;
struct page *page;
pgoff_t index = from >> PAGE_SHIFT;
int offset = from & (PAGE_SIZE-1);
@@ -143,7 +143,7 @@ static int _block2mtd_write(struct block2mtd_dev *dev, const u_char *buf,
{
struct page *page;
struct address_space *mapping =
- dev->bdev_handle->bdev->bd_inode->i_mapping;
+ bdev_inode(dev->bdev_handle->bdev)->i_mapping;
pgoff_t index = to >> PAGE_SHIFT; // page index
int offset = to & ~PAGE_MASK; // page offset
int cpylen;
@@ -212,7 +212,7 @@ static void block2mtd_free_device(struct block2mtd_dev *dev)

if (dev->bdev_handle) {
invalidate_mapping_pages(
- dev->bdev_handle->bdev->bd_inode->i_mapping, 0, -1);
+ bdev_inode(dev->bdev_handle->bdev)->i_mapping, 0, -1);
bdev_release(dev->bdev_handle);
}

@@ -295,7 +295,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
goto err_free_block2mtd;
}

- if ((long)bdev->bd_inode->i_size % erase_size) {
+ if ((long)bdev_inode(bdev)->i_size % erase_size) {
pr_err("erasesize must be a divisor of device size\n");
goto err_free_block2mtd;
}
@@ -313,7 +313,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,

dev->mtd.name = name;

- dev->mtd.size = bdev->bd_inode->i_size & PAGE_MASK;
+ dev->mtd.size = bdev_inode(bdev)->i_size & PAGE_MASK;
dev->mtd.erasesize = erase_size;
dev->mtd.writesize = 1;
dev->mtd.writebufsize = PAGE_SIZE;
--
2.39.2

2023-11-27 06:22:33

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 03/16] bcache: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
drivers/md/bcache/super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
index bfe1685dbae5..3ab8bae049ee 100644
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -171,7 +171,7 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
struct page *page;
unsigned int i;

- page = read_cache_page_gfp(bdev->bd_inode->i_mapping,
+ page = read_cache_page_gfp(bdev_inode(bdev)->i_mapping,
SB_OFFSET >> PAGE_SHIFT, GFP_KERNEL);
if (IS_ERR(page))
return "IO error";
--
2.39.2

2023-11-27 06:22:43

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 08/16] btrfs: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
fs/btrfs/disk-io.c | 6 +++---
fs/btrfs/volumes.c | 4 ++--
fs/btrfs/zoned.c | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 401ea09ae4b8..88b20cd4d046 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -3653,7 +3653,7 @@ struct btrfs_super_block *btrfs_read_dev_one_super(struct block_device *bdev,
struct btrfs_super_block *super;
struct page *page;
u64 bytenr, bytenr_orig;
- struct address_space *mapping = bdev->bd_inode->i_mapping;
+ struct address_space *mapping = bdev_inode(bdev)->i_mapping;
int ret;

bytenr_orig = btrfs_sb_offset(copy_num);
@@ -3740,7 +3740,7 @@ static int write_dev_supers(struct btrfs_device *device,
struct btrfs_super_block *sb, int max_mirrors)
{
struct btrfs_fs_info *fs_info = device->fs_info;
- struct address_space *mapping = device->bdev->bd_inode->i_mapping;
+ struct address_space *mapping = bdev_inode(device->bdev)->i_mapping;
SHASH_DESC_ON_STACK(shash, fs_info->csum_shash);
int i;
int errors = 0;
@@ -3857,7 +3857,7 @@ static int wait_dev_supers(struct btrfs_device *device, int max_mirrors)
device->commit_total_bytes)
break;

- page = find_get_page(device->bdev->bd_inode->i_mapping,
+ page = find_get_page(bdev_inode(device->bdev)->i_mapping,
bytenr >> PAGE_SHIFT);
if (!page) {
errors++;
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index c6f16625af51..bbf157cedab7 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -1257,8 +1257,8 @@ static struct btrfs_super_block *btrfs_read_disk_super(struct block_device *bdev
return ERR_PTR(-EINVAL);

/* pull in the page with our super */
- page = read_cache_page_gfp(bdev->bd_inode->i_mapping, index, GFP_KERNEL);
-
+ page = read_cache_page_gfp(bdev_inode(bdev)->i_mapping, index,
+ GFP_KERNEL);
if (IS_ERR(page))
return ERR_CAST(page);

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 188378ca19c7..a5f7f1458edf 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -120,7 +120,7 @@ static int sb_write_pointer(struct block_device *bdev, struct blk_zone *zones,
return -ENOENT;
} else if (full[0] && full[1]) {
/* Compare two super blocks */
- struct address_space *mapping = bdev->bd_inode->i_mapping;
+ struct address_space *mapping = bdev_inode(bdev)->i_mapping;
struct page *page[BTRFS_NR_SB_LOG_ZONES];
struct btrfs_super_block *super[BTRFS_NR_SB_LOG_ZONES];
int i;
--
2.39.2

2023-11-27 06:22:51

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 06/16] scsicam: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
drivers/scsi/scsicam.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/scsicam.c b/drivers/scsi/scsicam.c
index e2c7d8ef205f..de40a5ef7d96 100644
--- a/drivers/scsi/scsicam.c
+++ b/drivers/scsi/scsicam.c
@@ -32,7 +32,7 @@
*/
unsigned char *scsi_bios_ptable(struct block_device *dev)
{
- struct address_space *mapping = bdev_whole(dev)->bd_inode->i_mapping;
+ struct address_space *mapping = bdev_inode(bdev_whole(dev))->i_mapping;
unsigned char *res = NULL;
struct folio *folio;

--
2.39.2

2023-11-27 06:22:51

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 05/16] s390/dasd: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
drivers/s390/block/dasd_ioctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index 61b9675e2a67..a34554ace310 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -221,7 +221,7 @@ dasd_format(struct dasd_block *block, struct format_data_t *fdata)
* enabling the device later.
*/
if (fdata->start_unit == 0) {
- block->gdp->part0->bd_inode->i_blkbits =
+ bdev_inode(block->gdp->part0)->i_blkbits =
blksize_bits(fdata->blksize);
}

--
2.39.2

2023-11-27 06:23:05

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 09/16] cramfs: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
fs/cramfs/inode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
index 60dbfa0f8805..e9ed1e24c9e4 100644
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -183,7 +183,7 @@ static int next_buffer;
static void *cramfs_blkdev_read(struct super_block *sb, unsigned int offset,
unsigned int len)
{
- struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping;
+ struct address_space *mapping = bdev_inode(sb->s_bdev)->i_mapping;
struct file_ra_state ra = {};
struct page *pages[BLKS_PER_BUF];
unsigned i, blocknr, buffer;
--
2.39.2

2023-11-27 06:23:06

by Yu Kuai

[permalink] [raw]
Subject: [PATCH block/for-next v2 07/16] bcachefs: use new helper to get inode from block_device

From: Yu Kuai <[email protected]>

Which is more efficiency, and also prepare to remove the field
'bd_inode' from block_device.

Signed-off-by: Yu Kuai <[email protected]>
---
fs/bcachefs/util.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h
index 2984b57b2958..fe7ccb3a3517 100644
--- a/fs/bcachefs/util.h
+++ b/fs/bcachefs/util.h
@@ -518,7 +518,7 @@ int bch2_bio_alloc_pages(struct bio *, size_t, gfp_t);

static inline sector_t bdev_sectors(struct block_device *bdev)
{
- return bdev->bd_inode->i_size >> 9;
+ return bdev_inode(bdev)->i_size >> 9;
}

#define closure_bio_submit(bio, cl) \
--
2.39.2

2023-11-27 06:50:15

by Kent Overstreet

[permalink] [raw]
Subject: Re: [PATCH block/for-next v2 07/16] bcachefs: use new helper to get inode from block_device

On Mon, Nov 27, 2023 at 02:21:07PM +0800, Yu Kuai wrote:
> From: Yu Kuai <[email protected]>
>
> Which is more efficiency, and also prepare to remove the field
> 'bd_inode' from block_device.
>
> Signed-off-by: Yu Kuai <[email protected]>

Acked-by: Kent Overstreet <[email protected]>

> ---
> fs/bcachefs/util.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h
> index 2984b57b2958..fe7ccb3a3517 100644
> --- a/fs/bcachefs/util.h
> +++ b/fs/bcachefs/util.h
> @@ -518,7 +518,7 @@ int bch2_bio_alloc_pages(struct bio *, size_t, gfp_t);
>
> static inline sector_t bdev_sectors(struct block_device *bdev)
> {
> - return bdev->bd_inode->i_size >> 9;
> + return bdev_inode(bdev)->i_size >> 9;
> }
>
> #define closure_bio_submit(bio, cl) \
> --
> 2.39.2
>

2023-11-27 07:24:33

by Kent Overstreet

[permalink] [raw]
Subject: Re: [PATCH block/for-next v2 07/16] bcachefs: use new helper to get inode from block_device

On Mon, Nov 27, 2023 at 04:09:47PM +0900, Damien Le Moal wrote:
> On 11/27/23 15:21, Yu Kuai wrote:
> > From: Yu Kuai <[email protected]>
> >
> > Which is more efficiency, and also prepare to remove the field
> > 'bd_inode' from block_device.
> >
> > Signed-off-by: Yu Kuai <[email protected]>
> > ---
> > fs/bcachefs/util.h | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h
> > index 2984b57b2958..fe7ccb3a3517 100644
> > --- a/fs/bcachefs/util.h
> > +++ b/fs/bcachefs/util.h
> > @@ -518,7 +518,7 @@ int bch2_bio_alloc_pages(struct bio *, size_t, gfp_t);
> >
> > static inline sector_t bdev_sectors(struct block_device *bdev)
> > {
> > - return bdev->bd_inode->i_size >> 9;
> > + return bdev_inode(bdev)->i_size >> 9;
>
> shouldn't this use i_size_read() ?
>
> I missed the history with this but why not use bdev_nr_sectors() and delete this
> helper ?

Actually, this helper seems to be dead code.

2023-11-27 07:53:04

by Yu Kuai

[permalink] [raw]
Subject: Re: [PATCH block/for-next v2 07/16] bcachefs: use new helper to get inode from block_device

Hi,

?? 2023/11/27 15:24, Kent Overstreet ะด??:
> On Mon, Nov 27, 2023 at 04:09:47PM +0900, Damien Le Moal wrote:
>> On 11/27/23 15:21, Yu Kuai wrote:
>>> From: Yu Kuai <[email protected]>
>>>
>>> Which is more efficiency, and also prepare to remove the field
>>> 'bd_inode' from block_device.
>>>
>>> Signed-off-by: Yu Kuai <[email protected]>
>>> ---
>>> fs/bcachefs/util.h | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h
>>> index 2984b57b2958..fe7ccb3a3517 100644
>>> --- a/fs/bcachefs/util.h
>>> +++ b/fs/bcachefs/util.h
>>> @@ -518,7 +518,7 @@ int bch2_bio_alloc_pages(struct bio *, size_t, gfp_t);
>>>
>>> static inline sector_t bdev_sectors(struct block_device *bdev)
>>> {
>>> - return bdev->bd_inode->i_size >> 9;
>>> + return bdev_inode(bdev)->i_size >> 9;
>>
>> shouldn't this use i_size_read() ?
>>
>> I missed the history with this but why not use bdev_nr_sectors() and delete this
>> helper ?
>
> Actually, this helper seems to be dead code.

Yes, there is no caller of this helper, I'll remove this helper.

Thanks,
Kuai

> .
>

2023-11-27 15:29:35

by Nicolas Pitre

[permalink] [raw]
Subject: Re: [PATCH block/for-next v2 09/16] cramfs: use new helper to get inode from block_device

On Mon, 27 Nov 2023, Yu Kuai wrote:

> From: Yu Kuai <[email protected]>
>
> Which is more efficiency, and also prepare to remove the field
> 'bd_inode' from block_device.
>
> Signed-off-by: Yu Kuai <[email protected]>

Acked-by: Nicolas Pitre <[email protected]>

> ---
> fs/cramfs/inode.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/cramfs/inode.c b/fs/cramfs/inode.c
> index 60dbfa0f8805..e9ed1e24c9e4 100644
> --- a/fs/cramfs/inode.c
> +++ b/fs/cramfs/inode.c
> @@ -183,7 +183,7 @@ static int next_buffer;
> static void *cramfs_blkdev_read(struct super_block *sb, unsigned int offset,
> unsigned int len)
> {
> - struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping;
> + struct address_space *mapping = bdev_inode(sb->s_bdev)->i_mapping;
> struct file_ra_state ra = {};
> struct page *pages[BLKS_PER_BUF];
> unsigned i, blocknr, buffer;
> --
> 2.39.2
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
>