Track metadata bhs for an inode in fs-private part of the inode. Signed-off-by: Jan Kara --- fs/ext2/ext2.h | 2 ++ fs/ext2/file.c | 1 + fs/ext2/namei.c | 2 ++ fs/ext2/super.c | 6 ++++++ fs/ext2/symlink.c | 2 ++ 5 files changed, 13 insertions(+) diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index 5e0c6c5fcb6c..2b6593ba107f 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h @@ -676,6 +676,7 @@ struct ext2_inode_info { #ifdef CONFIG_QUOTA struct dquot __rcu *i_dquot[MAXQUOTAS]; #endif + struct mapping_metadata_bhs i_metadata_bhs; }; /* @@ -766,6 +767,7 @@ void ext2_msg(struct super_block *, const char *, const char *, ...); extern void ext2_update_dynamic_rev (struct super_block *sb); extern void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es, int wait); +struct mapping_metadata_bhs *ext2_get_metadata_bhs(struct inode *inode); /* * Inodes and files operations diff --git a/fs/ext2/file.c b/fs/ext2/file.c index ebe356a38b18..2dbf3e7c2e9c 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c @@ -338,4 +338,5 @@ const struct inode_operations ext2_file_inode_operations = { .fiemap = ext2_fiemap, .fileattr_get = ext2_fileattr_get, .fileattr_set = ext2_fileattr_set, + .get_metadata_bhs = ext2_get_metadata_bhs, }; diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index bde617a66cec..70c94adce837 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -422,6 +422,7 @@ const struct inode_operations ext2_dir_inode_operations = { .tmpfile = ext2_tmpfile, .fileattr_get = ext2_fileattr_get, .fileattr_set = ext2_fileattr_set, + .get_metadata_bhs = ext2_get_metadata_bhs, }; const struct inode_operations ext2_special_inode_operations = { @@ -430,4 +431,5 @@ const struct inode_operations ext2_special_inode_operations = { .setattr = ext2_setattr, .get_inode_acl = ext2_get_acl, .set_acl = ext2_set_acl, + .get_metadata_bhs = ext2_get_metadata_bhs, }; diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 603f2641fe10..503c25cae27c 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -215,6 +215,7 @@ static struct inode *ext2_alloc_inode(struct super_block *sb) #ifdef CONFIG_QUOTA memset(&ei->i_dquot, 0, sizeof(ei->i_dquot)); #endif + mmb_init(&ei->i_metadata_bhs); return &ei->vfs_inode; } @@ -259,6 +260,11 @@ static void destroy_inodecache(void) kmem_cache_destroy(ext2_inode_cachep); } +struct mapping_metadata_bhs *ext2_get_metadata_bhs(struct inode *inode) +{ + return &EXT2_I(inode)->i_metadata_bhs; +} + static int ext2_show_options(struct seq_file *seq, struct dentry *root) { struct super_block *sb = root->d_sb; diff --git a/fs/ext2/symlink.c b/fs/ext2/symlink.c index 948d3a441403..c82a15d28772 100644 --- a/fs/ext2/symlink.c +++ b/fs/ext2/symlink.c @@ -26,6 +26,7 @@ const struct inode_operations ext2_symlink_inode_operations = { .getattr = ext2_getattr, .setattr = ext2_setattr, .listxattr = ext2_listxattr, + .get_metadata_bhs = ext2_get_metadata_bhs, }; const struct inode_operations ext2_fast_symlink_inode_operations = { @@ -33,4 +34,5 @@ const struct inode_operations ext2_fast_symlink_inode_operations = { .getattr = ext2_getattr, .setattr = ext2_setattr, .listxattr = ext2_listxattr, + .get_metadata_bhs = ext2_get_metadata_bhs, }; -- 2.51.0