commit b175e2441b0cd9fae60341ba92b0f7f192e71446 Author: girish b=16893 i=adilger i=johann ext4 ldiskfs patches for rhel5 --- fs/ext4/ext4.h | 23 ++++++++++++++++++++++- fs/ext4/ext4_jbd2.c | 1 + fs/ext4/ialloc.c | 3 ++- fs/ext4/inode.c | 15 +++++++++++++++ fs/ext4/namei.c | 9 ++++++--- fs/ext4/super.c | 10 ++-------- 5 files changed, 48 insertions(+), 13 deletions(-) diff -ur a/fs/ext4/ext4.h b/fs/ext4/ext4.h --- a/fs/ext4/ext4.h 2021-06-28 08:45:39.093954644 -0600 +++ b/fs/ext4/ext4.h 2021-06-28 08:46:06.913523572 -0600 @@ -1995,7 +1997,21 @@ EXTN_FEATURE_FUNCS(2) EXTN_FEATURE_FUNCS(3) -EXTN_FEATURE_FUNCS(4) +static inline bool ext4_has_unknown_ext4_compat_features(struct super_block *sb) +{ + return ((EXT4_SB(sb)->s_es->s_feature_compat & + cpu_to_le32(~EXT4_FEATURE_COMPAT_SUPP)) != 0); +} +static inline bool ext4_has_unknown_ext4_ro_compat_features(struct super_block *sb) +{ + return ((EXT4_SB(sb)->s_es->s_feature_ro_compat & + cpu_to_le32(~EXT4_FEATURE_RO_COMPAT_SUPP)) != 0); +} +static inline bool ext4_has_unknown_ext4_incompat_features(struct super_block *sb) +{ + return ((EXT4_SB(sb)->s_es->s_feature_incompat & + cpu_to_le32(~EXT4_FEATURE_INCOMPAT_SUPP)) != 0); +} static inline bool ext4_has_compat_features(struct super_block *sb) { @@ -3399,6 +3415,13 @@ #define EXT_MAX_BLOCKS 0xffffffff extern void ext4_ext_tree_init(handle_t *handle, struct inode *inode); +extern struct buffer_head *ext4_read_inode_bitmap(struct super_block *sb, + ext4_group_t block_group); +extern void ext4_inc_count(handle_t *handle, struct inode *inode); +extern void ext4_dec_count(handle_t *handle, struct inode *inode); +extern struct buffer_head *ext4_append(handle_t *handle, + struct inode *inode, + ext4_lblk_t *block); extern int ext4_ext_index_trans_blocks(struct inode *inode, int extents); extern int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, struct ext4_map_blocks *map, int flags); diff -ur a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c --- a/fs/ext4/ext4_jbd2.c 2021-06-28 08:45:38.905957595 -0600 +++ b/fs/ext4/ext4_jbd2.c 2021-06-28 08:49:18.306817373 -0600 @@ -169,6 +169,7 @@ revoke_cred = max(0, revoke_cred - handle->h_revoke_credits); return ext4_journal_extend(handle, extend_cred, revoke_cred); } +EXPORT_SYMBOL(__ext4_journal_ensure_credits); static void ext4_journal_abort_handle(const char *caller, unsigned int line, const char *err_fn, diff -ur a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c --- a/fs/ext4/ialloc.c 2021-06-28 08:45:38.993956213 -0600 +++ b/fs/ext4/ialloc.c 2021-06-28 08:46:06.917523511 -0600 @@ -115,7 +115,7 @@ * * Return buffer_head of bitmap on success, or an ERR_PTR on error. */ -static struct buffer_head * +struct buffer_head * ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) { struct ext4_group_desc *desc; @@ -214,6 +214,7 @@ put_bh(bh); return ERR_PTR(err); } +EXPORT_SYMBOL(ext4_read_inode_bitmap); /* * NOTE! When we get the inode, we're the only people diff -ur a/fs/ext4/inode.c b/fs/ext4/inode.c --- a/fs/ext4/inode.c 2021-06-28 08:45:39.069955021 -0600 +++ b/fs/ext4/inode.c 2021-06-28 08:46:06.921523449 -0600 @@ -6088,3 +6088,19 @@ return ret; } +EXPORT_SYMBOL(ext4_map_blocks); +EXPORT_SYMBOL(ext4_truncate); +EXPORT_SYMBOL(ext4_iget); +EXPORT_SYMBOL(ext4_bread); +EXPORT_SYMBOL(ext4_itable_unused_count); +EXPORT_SYMBOL(ext4_force_commit); +EXPORT_SYMBOL(__ext4_mark_inode_dirty); +EXPORT_SYMBOL(ext4_get_group_desc); +EXPORT_SYMBOL(__ext4_journal_get_write_access); +EXPORT_SYMBOL(__ext4_journal_start_sb); +EXPORT_SYMBOL(__ext4_journal_stop); +EXPORT_SYMBOL(__ext4_handle_dirty_metadata); +EXPORT_SYMBOL(__ext4_std_error); +EXPORT_SYMBOL(ext4fs_dirhash); +EXPORT_SYMBOL(ext4_get_inode_loc); +EXPORT_SYMBOL(ext4_chunk_trans_blocks); diff -ur a/fs/ext4/namei.c b/fs/ext4/namei.c --- a/fs/ext4/namei.c 2021-06-28 08:45:39.093954644 -0600 +++ b/fs/ext4/namei.c 2021-06-28 08:46:06.921523449 -0600 @@ -50,7 +50,7 @@ #define NAMEI_RA_BLOCKS 4 #define NAMEI_RA_SIZE (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS) -static struct buffer_head *ext4_append(handle_t *handle, +struct buffer_head *ext4_append(handle_t *handle, struct inode *inode, ext4_lblk_t *block) { @@ -181,6 +181,7 @@ } return bh; } +EXPORT_SYMBOL(ext4_append); #ifndef assert #define assert(test) J_ASSERT(test) @@ -2584,23 +2585,25 @@ * for checking S_ISDIR(inode) (since the INODE_INDEX feature will not be set * on regular files) and to avoid creating huge/slow non-HTREE directories. */ -static void ext4_inc_count(handle_t *handle, struct inode *inode) +void ext4_inc_count(handle_t *handle, struct inode *inode) { inc_nlink(inode); if (is_dx(inode) && (inode->i_nlink > EXT4_LINK_MAX || inode->i_nlink == 2)) set_nlink(inode, 1); } +EXPORT_SYMBOL(ext4_inc_count); /* * If a directory had nlink == 1, then we should let it be 1. This indicates * directory has >EXT4_LINK_MAX subdirs. */ -static void ext4_dec_count(handle_t *handle, struct inode *inode) +void ext4_dec_count(handle_t *handle, struct inode *inode) { if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2) drop_nlink(inode); } +EXPORT_SYMBOL(ext4_dec_count); /* diff -ur a/fs/ext4/super.c b/fs/ext4/super.c --- a/fs/ext4/super.c 2021-06-28 08:45:38.909957532 -0600 +++ b/fs/ext4/super.c 2021-06-28 08:46:06.921523449 -0600 @@ -348,7 +348,7 @@ return; es->s_state |= cpu_to_le16(EXT4_ERROR_FS); ext4_update_tstamp(es, s_last_error_time); - strncpy(es->s_last_error_func, func, sizeof(es->s_last_error_func)); + strlcpy(es->s_last_error_func, func, sizeof(es->s_last_error_func)); es->s_last_error_line = cpu_to_le32(line); es->s_last_error_ino = cpu_to_le32(ino); es->s_last_error_block = cpu_to_le64(block); @@ -409,7 +409,7 @@ if (!es->s_first_error_time) { es->s_first_error_time = es->s_last_error_time; es->s_first_error_time_hi = es->s_last_error_time_hi; - strncpy(es->s_first_error_func, func, + strlcpy(es->s_first_error_func, func, sizeof(es->s_first_error_func)); es->s_first_error_line = cpu_to_le32(line); es->s_first_error_ino = es->s_last_error_ino; @@ -6382,16 +6382,12 @@ err = init_inodecache(); if (err) goto out1; - register_as_ext3(); - register_as_ext2(); err = register_filesystem(&ext4_fs_type); if (err) goto out; return 0; out: - unregister_as_ext2(); - unregister_as_ext3(); destroy_inodecache(); out1: ext4_exit_mballoc(); @@ -6414,8 +6410,6 @@ static void __exit ext4_exit_fs(void) { ext4_destroy_lazyinit_thread(); - unregister_as_ext2(); - unregister_as_ext3(); unregister_filesystem(&ext4_fs_type); destroy_inodecache(); ext4_exit_mballoc();