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++;
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);
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 *);
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;
};
#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;
/*
* 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);
_