From 5e85f11e8270d44a4962eed815bfbb405a4b7176 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Tue, 22 Apr 2025 14:41:21 -0400 Subject: [PATCH] RIP bd_inode. v6.9-rc4-29-g203c1ce0bb06 removes bd_inode. The canonical replacement is bd_mapping->host, were applicable. We have one use where we directly need the mapping instead of the inode, as well. Signed-off-by: Auke Kok --- kmod/src/Makefile.kernelcompat | 8 ++++++++ kmod/src/alloc.c | 4 ++-- kmod/src/kernelcompat.h | 8 ++++++++ kmod/src/server.c | 2 +- kmod/src/super.c | 4 ++-- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index bbdd8cbd..6014149a 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -465,3 +465,11 @@ endif ifneq (,$(shell grep -s 'define __LINUX_UNALIGNED_H' include/linux/unaligned.h)) ccflags-y += -DKC_HAVE__LINUX_UNALIGNED_H endif + +# +# v6.9-rc4-29-g203c1ce0bb06 +# +# RIP bd_inode. (note, struct moved between headers!) +ifneq (,$(shell grep -s 'struct inode.*bd_inode' include/linux/blk_types.h include/linux/fs.h)) +ccflags-y += -DKC_HAVE_BD_INODE +endif diff --git a/kmod/src/alloc.c b/kmod/src/alloc.c index 894b92ed..861af46c 100644 --- a/kmod/src/alloc.c +++ b/kmod/src/alloc.c @@ -279,14 +279,14 @@ static bool invalid_extent(u64 start, u64 end, u64 first, u64 last) static bool invalid_meta_blkno(struct super_block *sb, u64 blkno) { struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb); - u64 last_meta = (i_size_read(sbi->meta_bdev->bd_inode) >> SCOUTFS_BLOCK_LG_SHIFT) - 1; + u64 last_meta = (i_size_read(KC_BDEV_INODE(sbi->meta_bdev)) >> SCOUTFS_BLOCK_LG_SHIFT) - 1; return invalid_extent(blkno, blkno, SCOUTFS_META_DEV_START_BLKNO, last_meta); } static bool invalid_data_extent(struct super_block *sb, u64 start, u64 len) { - u64 last_data = (i_size_read(sb->s_bdev->bd_inode) >> SCOUTFS_BLOCK_SM_SHIFT) - 1; + u64 last_data = (i_size_read(KC_BDEV_INODE(sb->s_bdev)) >> SCOUTFS_BLOCK_SM_SHIFT) - 1; return invalid_extent(start, start + len - 1, SCOUTFS_DATA_DEV_START_BLKNO, last_data); } diff --git a/kmod/src/kernelcompat.h b/kmod/src/kernelcompat.h index 8af0b5f8..f5b66487 100644 --- a/kmod/src/kernelcompat.h +++ b/kmod/src/kernelcompat.h @@ -509,4 +509,12 @@ static inline long inode_get_atime_nsec(const struct inode *inode) } #endif +#ifdef KC_HAVE_BD_INODE +#define KC_BDEV_INODE(b) (b)->bd_inode +#define KC_BDEV_MAPPING(b) (b)->bd_inode->i_mapping +#else +#define KC_BDEV_INODE(b) (b)->bd_mapping->host +#define KC_BDEV_MAPPING(b) (b)->bd_mapping +#endif + #endif diff --git a/kmod/src/server.c b/kmod/src/server.c index b4fbd58a..6482df25 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -3232,7 +3232,7 @@ out: static u64 device_blocks(struct block_device *bdev, int shift) { - return i_size_read(bdev->bd_inode) >> shift; + return i_size_read(KC_BDEV_INODE(bdev)) >> shift; } static int server_resize_devices(struct super_block *sb, struct scoutfs_net_connection *conn, diff --git a/kmod/src/super.c b/kmod/src/super.c index 16ab2343..51801718 100644 --- a/kmod/src/super.c +++ b/kmod/src/super.c @@ -283,7 +283,7 @@ int scoutfs_write_super(struct super_block *sb, static bool small_bdev(struct super_block *sb, char *which, u64 blocks, struct block_device *bdev, int shift) { - u64 size = (u64)i_size_read(bdev->bd_inode); + u64 size = (u64)i_size_read(KC_BDEV_INODE(bdev)); u64 count = size >> shift; if (blocks > count) { @@ -508,7 +508,7 @@ static int scoutfs_fill_super(struct super_block *sb, void *data, int silent) sb->s_time_gran = 1; /* btree blocks use long lived bh->b_data refs */ - mapping_set_gfp_mask(sb->s_bdev->bd_inode->i_mapping, GFP_NOFS); + mapping_set_gfp_mask(KC_BDEV_MAPPING(sb->s_bdev), GFP_NOFS); sbi = kzalloc(sizeof(struct scoutfs_sb_info), GFP_KERNEL); sb->s_fs_info = sbi;