Whamcloud - gitweb
- this version of fast ea patch clears magic in inode in
authoralex <alex>
Wed, 17 Sep 2003 14:55:31 +0000 (14:55 +0000)
committeralex <alex>
Wed, 17 Sep 2003 14:55:31 +0000 (14:55 +0000)
  ext3_xattr_drop_inode() and allows ext3 with large inode to be mounted

lustre/kernel_patches/patches/ext3-ea-in-inode-2.4.18-chaos.patch

index 29be7c3..0317980 100644 (file)
@@ -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 *);
  
        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);
 
 _