From ed858c34c8e24da3bf67b23a20a0e4f246c2a027 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 17 Sep 2003 14:55:31 +0000 Subject: [PATCH] - this version of fast ea patch clears magic in inode in ext3_xattr_drop_inode() and allows ext3 with large inode to be mounted --- .../patches/ext3-ea-in-inode-2.4.18-chaos.patch | 60 +++++++++++++++++----- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch index 29be7c3..0317980 100644 --- a/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch +++ b/lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch @@ -1,12 +1,13 @@ fs/ext3/ialloc.c | 6 fs/ext3/inode.c | 8 - fs/ext3/xattr.c | 600 +++++++++++++++++++++++++++++++++++++++++++++- + fs/ext3/super.c | 4 + fs/ext3/xattr.c | 615 +++++++++++++++++++++++++++++++++++++++++++++- include/linux/ext3_fs.h | 2 include/linux/ext3_fs_i.h | 3 - 5 files changed, 608 insertions(+), 11 deletions(-) + 6 files changed, 626 insertions(+), 12 deletions(-) ---- linux-2.4.18-chaos-uml/fs/ext3/ialloc.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-10 23:43:07.000000000 +0400 -+++ linux-2.4.18-chaos-uml-alexey/fs/ext3/ialloc.c 2003-09-10 23:43:23.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/ialloc.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:19.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/ialloc.c 2003-09-17 18:58:39.000000000 +0400 @@ -586,6 +586,12 @@ repeat: insert_inode_hash(inode); inode->i_generation = sbi->s_next_generation++; @@ -20,8 +21,8 @@ ei->i_state = EXT3_STATE_NEW; err = ext3_get_inode_loc_new(inode, &iloc, 1); if (err) goto fail; ---- linux-2.4.18-chaos-uml/fs/ext3/inode.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-10 23:43:07.000000000 +0400 -+++ linux-2.4.18-chaos-uml-alexey/fs/ext3/inode.c 2003-09-10 23:43:23.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/inode.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:19.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/inode.c 2003-09-17 18:58:39.000000000 +0400 @@ -2459,6 +2459,11 @@ void ext3_read_inode(struct inode * inod ei->i_data[block] = iloc.raw_inode->i_block[block]; INIT_LIST_HEAD(&ei->i_orphan); @@ -44,8 +45,8 @@ BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata"); rc = ext3_journal_dirty_metadata(handle, bh); if (!err) ---- linux-2.4.18-chaos-uml/fs/ext3/xattr.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-10 23:42:57.000000000 +0400 -+++ linux-2.4.18-chaos-uml-alexey/fs/ext3/xattr.c 2003-09-10 23:43:23.000000000 +0400 +--- linux-2.4.18-chaos-uml/fs/ext3/xattr.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:16.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/xattr.c 2003-09-17 18:58:39.000000000 +0400 @@ -102,6 +102,9 @@ static int ext3_xattr_set2(handle_t *, struct inode *, struct buffer_head *, struct ext3_xattr_header *); @@ -712,8 +713,30 @@ return error; } ---- linux-2.4.18-chaos-uml/include/linux/ext3_fs.h~ext3-ea-in-inode-2.4.18-chaos 2003-09-10 23:43:07.000000000 +0400 -+++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs.h 2003-09-10 23:43:23.000000000 +0400 +@@ -949,6 +1527,21 @@ ext3_xattr_drop_inode(handle_t *handle, + { + struct buffer_head *bh; + unsigned int block = EXT3_I(inode)->i_file_acl; ++ struct ext3_iloc iloc; ++ int err; ++ ++ /* drop eas in inode */ ++ if (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) { ++ err = ext3_get_inode_loc(inode, &iloc); ++ if (err == 0) { ++ __u32 *start; ++ start = (__u32 *) ((char *) iloc.raw_inode + ++ EXT3_GOOD_OLD_INODE_SIZE + ++ EXT3_I(inode)->i_extra_isize); ++ *start = 0UL; ++ brelse(iloc.bh); ++ } ++ } + + if (!block) + return; +--- linux-2.4.18-chaos-uml/include/linux/ext3_fs.h~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:19.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs.h 2003-09-17 18:58:39.000000000 +0400 @@ -264,6 +264,8 @@ struct ext3_inode { __u32 m_i_reserved2[2]; } masix2; @@ -723,8 +746,8 @@ }; #define i_size_high i_dir_acl ---- linux-2.4.18-chaos-uml/include/linux/ext3_fs_i.h~ext3-ea-in-inode-2.4.18-chaos 2003-09-10 23:43:06.000000000 +0400 -+++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs_i.h 2003-09-10 23:43:23.000000000 +0400 +--- linux-2.4.18-chaos-uml/include/linux/ext3_fs_i.h~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:18.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/include/linux/ext3_fs_i.h 2003-09-17 18:58:39.000000000 +0400 @@ -62,6 +62,9 @@ struct ext3_inode_info { */ loff_t i_disksize; @@ -735,5 +758,18 @@ /* * truncate_sem is for serialising ext3_truncate() against * ext3_getblock(). In the 2.4 ext2 design, great chunks of inode's +--- linux-2.4.18-chaos-uml/fs/ext3/super.c~ext3-ea-in-inode-2.4.18-chaos 2003-09-17 18:58:18.000000000 +0400 ++++ linux-2.4.18-chaos-uml-alexey/fs/ext3/super.c 2003-09-17 18:59:14.000000000 +0400 +@@ -1292,7 +1292,9 @@ struct super_block * ext3_read_super (st + } else { + sbi->s_inode_size = le16_to_cpu(es->s_inode_size); + sbi->s_first_ino = le32_to_cpu(es->s_first_ino); +- if (sbi->s_inode_size != EXT3_GOOD_OLD_INODE_SIZE) { ++ if ((sbi->s_inode_size < EXT3_GOOD_OLD_INODE_SIZE) || ++ (sbi->s_inode_size & (sbi->s_inode_size - 1)) || ++ (sbi->s_inode_size > blocksize)) { + printk (KERN_ERR + "EXT3-fs: unsupported inode size: %d\n", + sbi->s_inode_size); _ -- 1.8.3.1