Whamcloud - gitweb
LU-781 kernel: kernel update [RHEL6.2 2.6.32-220]
authoryangsheng <ys@whamcloud.com>
Thu, 5 Jan 2012 10:30:42 +0000 (18:30 +0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 6 Feb 2012 17:28:15 +0000 (12:28 -0500)
Add support for RHEL6.2. The version is 2.6.32-220.el6.

Change-Id: Icc03a2f5d8b377aa1b1180ae09056989bbc84a9d
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Signed-off-by: Oleg Drokin <green@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/1986
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
28 files changed:
build/lbuild-rhel
build/lbuild-rhel6
ldiskfs/kernel_patches/patches/export-ext4-2.6-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-big-endian-check-2.6-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-disable-mb-cache-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-dynlocks-common-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-extents-mount-option-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-force_over_128tb-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-max-dir-size-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-mballoc-extra-checks-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-misc-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-mmp-rhel6.patch
ldiskfs/kernel_patches/patches/ext4-prealloc-rhel6.patch
ldiskfs/kernel_patches/patches/ext4_data_in_dirent-rhel6.patch
ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel6.series
lustre/ChangeLog
lustre/autoconf/lustre-core.m4
lustre/kernel_patches/kernel_configs/kernel-2.6.32-2.6-rhel6-i686.config
lustre/kernel_patches/kernel_configs/kernel-2.6.32-2.6-rhel6-x86_64.config
lustre/kernel_patches/patches/dev_read_only-2.6.32-rhel6.patch
lustre/kernel_patches/patches/vfs_races-2.6.32-rhel6.patch
lustre/kernel_patches/series/2.6-rhel6.series
lustre/kernel_patches/targets/2.6-rhel6.target.in
lustre/kernel_patches/which_patch
lustre/ldlm/ldlm_lockd.c
lustre/obdclass/obd_mount.c
lustre/ptlrpc/ptlrpc_internal.h
lustre/ptlrpc/sec.c

index 87e4815..0aa22ce 100644 (file)
@@ -21,8 +21,7 @@ get_rpmbuildopts() {
 # patching common to all releases
 patch_spec_common() {
 
-    sed -i -e 's/^\(%define signmodules \).*/\10/' \
-           -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
+    sed -i -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
     cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \
     cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \
           SPECS/$SPEC_NAME 2>&1 || \
index 4381c3f..fd081ae 100644 (file)
@@ -29,9 +29,9 @@ ApplyOptionalPatch linux-%{version}-lustre.patch\
 ' \
            -e '/rm -f include\/generated\/kernel.cross/i\
   # lustre kernel config.\
-  if [ -f %{_topdir}/lustre/lustre/kernel_patches/kernel_configs/kernel-%{version}-2.6-rhel6-$Arch.config ]; then\
-    echo "# $Arch" > configs/kernel-%{version}-$Arch.config\
-    cat %{_topdir}/lustre/lustre/kernel_patches/kernel_configs/kernel-%{version}-2.6-rhel6-$Arch.config >> configs/kernel-%{version}-$Arch.config\
+  if [ -f %{_topdir}/lustre/lustre/kernel_patches/kernel_configs/kernel-%{version}-2.6-rhel6-%{_target_cpu}.config ]; then\
+    echo "# $Arch" > configs/kernel-%{version}-%{_target_cpu}.config\
+    cat %{_topdir}/lustre/lustre/kernel_patches/kernel_configs/kernel-%{version}-2.6-rhel6-%{_target_cpu}.config >> configs/kernel-%{version}-%{_target_cpu}.config\
   fi'\
           SPECS/$SPEC_NAME 2>&1 || \
         fatal 1 "Error while editing SPECS/$SPEC_NAME"
index c3411d2..d4a1af7 100644 (file)
@@ -1,8 +1,8 @@
-Index: linux-2.6.32.i386/fs/ext4/super.c
+Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-2.6.32.i386.orig/fs/ext4/super.c     2010-04-07 14:18:32.000000000 +0530
-+++ linux-2.6.32.i386/fs/ext4/super.c  2010-04-07 14:19:47.000000000 +0530
-@@ -291,6 +291,8 @@
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -301,6 +301,8 @@ void ext4_journal_abort_handle(const cha
        jbd2_journal_abort_handle(handle);
  }
  
@@ -11,7 +11,7 @@ Index: linux-2.6.32.i386/fs/ext4/super.c
  /* Deal with the reporting of failure conditions on a filesystem such as
   * inconsistencies detected or read IO failures.
   *
-@@ -3030,6 +3032,8 @@
+@@ -3498,6 +3500,8 @@ out_fail:
        return ret;
  }
  
@@ -20,7 +20,7 @@ Index: linux-2.6.32.i386/fs/ext4/super.c
  /*
   * Setup any per-fs journal parameters now.  We'll do this both on
   * initial mount, once the journal has been initialised but before we've
-@@ -4088,6 +4092,12 @@
+@@ -4603,6 +4607,12 @@ int ext4_map_inode_page(struct inode *in
                        unsigned long *blocks, int *created, int create);
  EXPORT_SYMBOL(ext4_map_inode_page);
  
@@ -33,24 +33,24 @@ Index: linux-2.6.32.i386/fs/ext4/super.c
  MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
  MODULE_DESCRIPTION("Fourth Extended Filesystem");
  MODULE_LICENSE("GPL");
-Index: linux-2.6.32.i386/fs/ext4/ext4.h
+Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-2.6.32.i386.orig/fs/ext4/ext4.h      2010-04-07 14:17:04.000000000 +0530
-+++ linux-2.6.32.i386/fs/ext4/ext4.h   2010-04-07 14:20:34.000000000 +0530
-@@ -1385,6 +1385,8 @@
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -1599,6 +1599,8 @@ extern unsigned ext4_init_inode_bitmap(s
                                       struct buffer_head *bh,
                                       ext4_group_t group,
                                       struct ext4_group_desc *desc);
 +extern struct buffer_head *ext4_read_inode_bitmap(struct super_block *sb,
 +                                                ext4_group_t block_group);
  extern void mark_bitmap_end(int start_bit, int end_bit, char *bitmap);
- /* mballoc.c */
-Index: linux-2.6.32.i386/fs/ext4/ialloc.c
+ extern int ext4_init_inode_table(struct super_block *sb,
+                                ext4_group_t group, int barrier);
+Index: linux-stage/fs/ext4/ialloc.c
 ===================================================================
---- linux-2.6.32.i386.orig/fs/ext4/ialloc.c    2009-12-03 09:21:21.000000000 +0530
-+++ linux-2.6.32.i386/fs/ext4/ialloc.c 2010-04-07 14:19:47.000000000 +0530
-@@ -98,7 +98,7 @@
+--- linux-stage.orig/fs/ext4/ialloc.c
++++ linux-stage/fs/ext4/ialloc.c
+@@ -97,7 +97,7 @@ unsigned ext4_init_inode_bitmap(struct s
   *
   * Return buffer_head of bitmap on success or NULL.
   */
@@ -59,7 +59,7 @@ Index: linux-2.6.32.i386/fs/ext4/ialloc.c
  ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
  {
        struct ext4_group_desc *desc;
-@@ -161,6 +161,7 @@
+@@ -161,6 +161,7 @@ ext4_read_inode_bitmap(struct super_bloc
        }
        return bh;
  }
@@ -67,11 +67,11 @@ Index: linux-2.6.32.i386/fs/ext4/ialloc.c
  
  /*
   * NOTE! When we get the inode, we're the only people
-Index: linux-2.6.32.i386/fs/ext4/balloc.c
+Index: linux-stage/fs/ext4/balloc.c
 ===================================================================
---- linux-2.6.32.i386.orig/fs/ext4/balloc.c    2010-03-19 15:43:37.000000000 +0530
-+++ linux-2.6.32.i386/fs/ext4/balloc.c 2010-04-07 14:19:47.000000000 +0530
-@@ -235,6 +235,7 @@
+--- linux-stage.orig/fs/ext4/balloc.c
++++ linux-stage/fs/ext4/balloc.c
+@@ -229,6 +229,7 @@ struct ext4_group_desc * ext4_get_group_
                *bh = sbi->s_group_desc[group_desc];
        return desc;
  }
index 6a1ef25..2b1eb8a 100644 (file)
@@ -1,26 +1,26 @@
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-03-11 15:27:08.000000000 +0800
-+++ linux-stage/fs/ext4/super.c        2011-03-11 15:29:41.023089829 +0800
-@@ -72,6 +72,8 @@
- static int ext4_freeze(struct super_block *sb);
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -82,6 +82,8 @@ static void ext4_clear_request_list(void
  
+ wait_queue_head_t aio_wq[WQ_HASH_SZ];
  
 +static int bigendian_extents;
 +
  ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
                               struct ext4_group_desc *bg)
  {
-@@ -1492,7 +1494,7 @@
+@@ -1178,7 +1180,7 @@ enum {
+       Opt_stripe, Opt_delalloc, Opt_nodelalloc,
        Opt_block_validity, Opt_noblock_validity,
        Opt_inode_readahead_blks, Opt_journal_ioprio,
-       Opt_discard, Opt_nodiscard,
 -      Opt_mballoc,
 +      Opt_mballoc, Opt_bigendian_extents,
+       Opt_discard, Opt_nodiscard,
+       Opt_init_inode_table, Opt_noinit_inode_table,
  };
- static const match_table_t tokens = {
-@@ -1559,6 +1561,7 @@
+@@ -1250,6 +1252,7 @@ static const match_table_t tokens = {
        {Opt_auto_da_alloc, "auto_da_alloc=%u"},
        {Opt_auto_da_alloc, "auto_da_alloc"},
        {Opt_noauto_da_alloc, "noauto_da_alloc"},
@@ -28,9 +28,9 @@ Index: linux-stage/fs/ext4/super.c
        {Opt_mballoc, "mballoc"},
        {Opt_discard, "discard"},
        {Opt_nodiscard, "nodiscard"},
-@@ -1996,6 +1999,9 @@
-                       break;
-               case Opt_mballoc:
+@@ -1692,6 +1695,9 @@ set_qf_format:
+                       else
+                               set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC);
                        break;
 +              case Opt_bigendian_extents:
 +                      bigendian_extents = 1;
@@ -38,7 +38,7 @@ Index: linux-stage/fs/ext4/super.c
                case Opt_discard:
                        set_opt(sbi->s_mount_opt, DISCARD);
                        break;
-@@ -3073,6 +3079,16 @@
+@@ -3179,6 +3185,16 @@ static int ext4_fill_super(struct super_
                goto failed_mount;
        }
  
index ee25925..6cb5b67 100644 (file)
@@ -1,8 +1,8 @@
 Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4.h    2011-03-14 16:16:45.000000000 +0800
-+++ linux-stage/fs/ext4/ext4.h 2011-03-14 16:17:08.732676431 +0800
-@@ -758,7 +758,8 @@
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -837,7 +837,8 @@ struct ext4_inode_info {
  /*
   * Mount flags
   */
@@ -14,25 +14,25 @@ Index: linux-stage/fs/ext4/ext4.h
  #define EXT4_MOUNT_ERRORS_CONT                0x00010 /* Continue on errors */
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-03-14 16:16:45.000000000 +0800
-+++ linux-stage/fs/ext4/super.c        2011-03-14 16:18:13.831956469 +0800
-@@ -1502,6 +1502,7 @@
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -1189,6 +1189,7 @@ enum {
        Opt_inode_readahead_blks, Opt_journal_ioprio,
-       Opt_discard, Opt_nodiscard,
        Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
-+      Opt_no_mbcache,
        Opt_extents, Opt_noextents,
++      Opt_no_mbcache,
+       Opt_discard, Opt_nodiscard,
+       Opt_init_inode_table, Opt_noinit_inode_table,
  };
-@@ -1574,6 +1575,7 @@
+@@ -1263,6 +1264,7 @@ static const match_table_t tokens = {
+       {Opt_bigendian_extents, "bigendian_extents"},
+       {Opt_force_over_128tb, "force_over_128tb"},
        {Opt_mballoc, "mballoc"},
-       {Opt_discard, "discard"},
-       {Opt_nodiscard, "nodiscard"},
 +      {Opt_no_mbcache, "no_mbcache"},
        {Opt_extents, "extents"},
        {Opt_noextents, "noextents"},
-       {Opt_err, NULL},
-@@ -2049,6 +2051,9 @@
+       {Opt_discard, "discard"},
+@@ -1761,6 +1763,9 @@ set_qf_format:
                        }
                        clear_opt(sbi->s_mount_opt, EXTENTS);
                        break;
@@ -44,8 +44,8 @@ Index: linux-stage/fs/ext4/super.c
                               "Unrecognized mount option \"%s\" "
 Index: linux-stage/fs/ext4/xattr.c
 ===================================================================
---- linux-stage.orig/fs/ext4/xattr.c   2011-03-14 16:16:43.000000000 +0800
-+++ linux-stage/fs/ext4/xattr.c        2011-03-14 16:17:08.806677883 +0800
+--- linux-stage.orig/fs/ext4/xattr.c
++++ linux-stage/fs/ext4/xattr.c
 @@ -86,7 +86,8 @@
  # define ea_bdebug(f...)
  #endif
@@ -56,7 +56,7 @@ Index: linux-stage/fs/ext4/xattr.c
  static struct buffer_head *ext4_xattr_cache_find(struct inode *,
                                                 struct ext4_xattr_header *,
                                                 struct mb_cache_entry **);
-@@ -234,7 +235,7 @@
+@@ -234,7 +235,7 @@ bad_block:
                error = -EIO;
                goto cleanup;
        }
@@ -65,7 +65,7 @@ Index: linux-stage/fs/ext4/xattr.c
        entry = BFIRST(bh);
        error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1);
        if (error == -EIO)
-@@ -376,7 +377,7 @@
+@@ -376,7 +377,7 @@ ext4_xattr_block_list(struct inode *inod
                error = -EIO;
                goto cleanup;
        }
@@ -74,7 +74,7 @@ Index: linux-stage/fs/ext4/xattr.c
        error = ext4_xattr_list_entries(inode, BFIRST(bh), buffer, buffer_size);
  
  cleanup:
-@@ -473,7 +474,9 @@
+@@ -473,7 +474,9 @@ ext4_xattr_release_block(handle_t *handl
        struct mb_cache_entry *ce = NULL;
        int error = 0;
  
@@ -85,7 +85,7 @@ Index: linux-stage/fs/ext4/xattr.c
        error = ext4_journal_get_write_access(handle, bh);
        if (error)
                goto out;
-@@ -700,8 +703,10 @@
+@@ -700,8 +703,10 @@ ext4_xattr_block_set(handle_t *handle, s
        if (i->value && i->value_len > sb->s_blocksize)
                return -ENOSPC;
        if (s->base) {
@@ -98,7 +98,7 @@ Index: linux-stage/fs/ext4/xattr.c
                error = ext4_journal_get_write_access(handle, bs->bh);
                if (error)
                        goto cleanup;
-@@ -718,7 +723,7 @@
+@@ -718,7 +723,7 @@ ext4_xattr_block_set(handle_t *handle, s
                                if (!IS_LAST_ENTRY(s->first))
                                        ext4_xattr_rehash(header(s->base),
                                                          s->here);
@@ -107,7 +107,7 @@ Index: linux-stage/fs/ext4/xattr.c
                        }
                        unlock_buffer(bs->bh);
                        if (error == -EIO)
-@@ -801,7 +806,8 @@
+@@ -801,7 +806,8 @@ inserted:
                                if (error)
                                        goto cleanup_dquot;
                        }
@@ -117,7 +117,7 @@ Index: linux-stage/fs/ext4/xattr.c
                        ce = NULL;
                } else if (bs->bh && s->base == bs->bh->b_data) {
                        /* We were modifying this block in-place. */
-@@ -845,7 +851,7 @@
+@@ -845,7 +851,7 @@ getblk_failed:
                        memcpy(new_bh->b_data, s->base, new_bh->b_size);
                        set_buffer_uptodate(new_bh);
                        unlock_buffer(new_bh);
@@ -126,7 +126,7 @@ Index: linux-stage/fs/ext4/xattr.c
                        error = ext4_handle_dirty_metadata(handle,
                                                           inode, new_bh);
                        if (error)
-@@ -1403,12 +1409,15 @@
+@@ -1403,12 +1409,15 @@ ext4_xattr_put_super(struct super_block 
   * Returns 0, or a negative error number on failure.
   */
  static void
@@ -143,7 +143,7 @@ Index: linux-stage/fs/ext4/xattr.c
        ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
        if (!ce) {
                ea_bdebug(bh, "out of memory");
-@@ -1482,6 +1491,8 @@
+@@ -1482,6 +1491,8 @@ ext4_xattr_cache_find(struct inode *inod
        __u32 hash = le32_to_cpu(header->h_hash);
        struct mb_cache_entry *ce;
  
index 17ed593..c91c8bc 100644 (file)
@@ -38,7 +38,7 @@ Index: linux-stage/fs/ext4/dynlocks.c
 +{
 +      int rc = 0;
 +
-+      printk(KERN_INFO "init dynlocks cache\n");
++      /* printk(KERN_INFO "init dynlocks cache\n"); */
 +      dynlock_cachep = kmem_cache_create("dynlock_cache",
 +                                       sizeof(struct dynlock_handle),
 +                                       0,
@@ -51,9 +51,9 @@ Index: linux-stage/fs/ext4/dynlocks.c
 +      return rc;
 +}
 +
-+void __exit dynlock_cache_exit(void)
++void dynlock_cache_exit(void)
 +{
-+      printk(KERN_INFO "exit dynlocks cache\n");
++      /* printk(KERN_INFO "exit dynlocks cache\n"); */
 +      kmem_cache_destroy(dynlock_cachep);
 +}
 +
@@ -122,7 +122,7 @@ Index: linux-stage/fs/ext4/dynlocks.c
 +              goto found;
 +      }
 +      spin_unlock(&dl->dl_list_lock);
-+      
++
 +      /* lock not found and we haven't allocated lock yet. allocate it */
 +      nhl = kmem_cache_alloc(dynlock_cachep, gfp);
 +      if (nhl == NULL)
@@ -179,7 +179,7 @@ Index: linux-stage/fs/ext4/dynlocks.c
 +void dynlock_unlock(struct dynlock *dl, struct dynlock_handle *hl)
 +{
 +      int wakeup = 0;
-+      
++
 +      BUG_ON(dl == NULL);
 +      BUG_ON(hl == NULL);
 +      BUG_ON(dl->dl_magic != DYNLOCK_LIST_MAGIC);
@@ -295,13 +295,16 @@ Index: linux-stage/fs/ext4/super.c
 ===================================================================
 --- linux-stage.orig/fs/ext4/super.c
 +++ linux-stage/fs/ext4/super.c
-@@ -4125,32 +4125,37 @@ static int __init init_ext4_fs(void)
+@@ -4620,20 +4620,23 @@ static int __init init_ext4_fs(void)
                return err;
        ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
        if (!ext4_kset)
 -              goto out4;
 +              goto out5;
        ext4_proc_root = proc_mkdir("fs/ext4", NULL);
+       err = ext4_init_feat_adverts();
        err = init_ext4_mballoc();
        if (err)
 -              goto out3;
@@ -319,7 +322,8 @@ Index: linux-stage/fs/ext4/super.c
                goto out1;
        err = register_filesystem(&ext4_fs_type);
        if (err)
-               goto out;
+@@ -4643,16 +4646,18 @@ static int __init init_ext4_fs(void)
+       mutex_init(&ext4_li_mtx);
        return 0;
  out:
 -      destroy_inodecache();
@@ -333,6 +337,7 @@ Index: linux-stage/fs/ext4/super.c
  out3:
 +      exit_ext4_mballoc();
 +out4:
+       ext4_exit_feat_adverts();
        remove_proc_entry("fs/ext4", NULL);
        kset_unregister(ext4_kset);
 -out4:
@@ -340,9 +345,9 @@ Index: linux-stage/fs/ext4/super.c
        exit_ext4_system_zone();
        return err;
  }
-@@ -4158,6 +4163,7 @@ out4:
- static void __exit exit_ext4_fs(void)
+@@ -4661,6 +4666,7 @@ static void __exit exit_ext4_fs(void)
  {
+       ext4_destroy_lazyinit_thread();
        unregister_filesystem(&ext4_fs_type);
 +      dynlock_cache_exit();
        destroy_inodecache();
index a40b8a2..c99c672 100644 (file)
@@ -1,7 +1,7 @@
 Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4.h    2011-05-20 11:01:37.000000000 +0300
-+++ linux-stage/fs/ext4/ext4.h 2011-05-20 11:01:44.000000000 +0300
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
 @@ -859,6 +859,7 @@ struct ext4_inode_info {
  #define EXT4_MOUNT_QUOTA              0x80000 /* Some quota option set */
  #define EXT4_MOUNT_USRQUOTA           0x100000 /* "old" user quota */
@@ -12,8 +12,8 @@ Index: linux-stage/fs/ext4/ext4.h
  #define EXT4_MOUNT_I_VERSION            0x2000000 /* i_version support */
 Index: linux-stage/fs/ext4/ext4_jbd2.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4_jbd2.h       2011-05-20 11:00:01.000000000 +0300
-+++ linux-stage/fs/ext4/ext4_jbd2.h    2011-05-20 11:01:44.000000000 +0300
+--- linux-stage.orig/fs/ext4/ext4_jbd2.h
++++ linux-stage/fs/ext4/ext4_jbd2.h
 @@ -33,7 +33,7 @@
  
  #define EXT4_SINGLEDATA_TRANS_BLOCKS(sb)                              \
@@ -25,9 +25,9 @@ Index: linux-stage/fs/ext4/ext4_jbd2.h
                ext4_handle_dirty_metadata(handle, NULL, bh)
 Index: linux-stage/fs/ext4/extents.c
 ===================================================================
---- linux-stage.orig/fs/ext4/extents.c 2011-05-20 11:00:01.000000000 +0300
-+++ linux-stage/fs/ext4/extents.c      2011-05-20 11:01:44.000000000 +0300
-@@ -2555,7 +2555,7 @@ void ext4_ext_init(struct super_block *s
+--- linux-stage.orig/fs/ext4/extents.c
++++ linux-stage/fs/ext4/extents.c
+@@ -2554,7 +2554,7 @@ void ext4_ext_init(struct super_block *s
         * possible initialization would be here
         */
  
@@ -36,7 +36,7 @@ Index: linux-stage/fs/ext4/extents.c
  #if defined(AGGRESSIVE_TEST) || defined(CHECK_BINSEARCH) || defined(EXTENTS_STATS)
                printk(KERN_INFO "EXT4-fs: file extents enabled");
  #ifdef AGGRESSIVE_TEST
-@@ -2582,7 +2582,7 @@ void ext4_ext_init(struct super_block *s
+@@ -2581,7 +2581,7 @@ void ext4_ext_init(struct super_block *s
   */
  void ext4_ext_release(struct super_block *sb)
  {
@@ -47,9 +47,9 @@ Index: linux-stage/fs/ext4/extents.c
  #ifdef EXTENTS_STATS
 Index: linux-stage/fs/ext4/ialloc.c
 ===================================================================
---- linux-stage.orig/fs/ext4/ialloc.c  2011-05-20 11:01:36.000000000 +0300
-+++ linux-stage/fs/ext4/ialloc.c       2011-05-20 11:01:44.000000000 +0300
-@@ -1049,7 +1049,7 @@ got:
+--- linux-stage.orig/fs/ext4/ialloc.c
++++ linux-stage/fs/ext4/ialloc.c
+@@ -1063,7 +1063,7 @@ got:
        if (err)
                goto fail_free_drop;
  
@@ -60,8 +60,8 @@ Index: linux-stage/fs/ext4/ialloc.c
                        ext4_set_inode_flag(inode, EXT4_INODE_EXTENTS);
 Index: linux-stage/fs/ext4/migrate.c
 ===================================================================
---- linux-stage.orig/fs/ext4/migrate.c 2011-05-20 10:59:29.000000000 +0300
-+++ linux-stage/fs/ext4/migrate.c      2011-05-20 11:03:22.000000000 +0300
+--- linux-stage.orig/fs/ext4/migrate.c
++++ linux-stage/fs/ext4/migrate.c
 @@ -459,13 +459,10 @@ int ext4_ext_migrate(struct inode *inode
        unsigned long max_entries;
        __u32 goal;
@@ -82,9 +82,9 @@ Index: linux-stage/fs/ext4/migrate.c
        if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0)
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-05-20 11:01:37.000000000 +0300
-+++ linux-stage/fs/ext4/super.c        2011-05-20 11:01:44.000000000 +0300
-@@ -945,6 +945,8 @@ static int ext4_show_options(struct seq_
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -956,6 +956,8 @@ static int ext4_show_options(struct seq_
                seq_puts(seq, ",journal_async_commit");
        if (test_opt(sb, NOBH))
                seq_puts(seq, ",nobh");
@@ -92,25 +92,25 @@ Index: linux-stage/fs/ext4/super.c
 +              seq_puts(seq, ",noextents");
        if (test_opt(sb, I_VERSION))
                seq_puts(seq, ",i_version");
-       if (!test_opt(sb, DELALLOC))
-@@ -1515,6 +1517,7 @@ enum {
+       if (!test_opt(sb, DELALLOC) &&
+@@ -1186,6 +1188,7 @@ enum {
+       Opt_block_validity, Opt_noblock_validity,
        Opt_inode_readahead_blks, Opt_journal_ioprio,
-       Opt_discard, Opt_nodiscard,
        Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
 +      Opt_extents, Opt_noextents,
+       Opt_discard, Opt_nodiscard,
+       Opt_init_inode_table, Opt_noinit_inode_table,
  };
- static const match_table_t tokens = {
-@@ -1589,6 +1592,8 @@ static const match_table_t tokens = {
+@@ -1260,6 +1263,8 @@ static const match_table_t tokens = {
+       {Opt_bigendian_extents, "bigendian_extents"},
+       {Opt_force_over_128tb, "force_over_128tb"},
        {Opt_mballoc, "mballoc"},
-       {Opt_discard, "discard"},
-       {Opt_nodiscard, "nodiscard"},
 +      {Opt_extents, "extents"},
 +      {Opt_noextents, "noextents"},
-       {Opt_err, NULL},
- };
-@@ -1631,6 +1636,7 @@ static int parse_options(char *options, 
+       {Opt_discard, "discard"},
+       {Opt_nodiscard, "nodiscard"},
+       {Opt_init_inode_table, "init_itable=%u"},
+@@ -1307,6 +1312,7 @@ static int parse_options(char *options, 
        int qtype, qfmt;
        char *qname;
  #endif
@@ -118,7 +118,7 @@ Index: linux-stage/fs/ext4/super.c
  
        if (!options)
                return 1;
-@@ -2039,6 +2045,32 @@ set_qf_format:
+@@ -1729,6 +1735,32 @@ set_qf_format:
                case Opt_force_over_128tb:
                        force_over_128tb = 1;
                        break;
@@ -151,8 +151,8 @@ Index: linux-stage/fs/ext4/super.c
                default:
                        ext4_msg(sb, KERN_ERR,
                               "Unrecognized mount option \"%s\" "
-@@ -2901,6 +2933,17 @@ static int ext4_fill_super(struct super_
-       set_opt(sbi->s_mount_opt, BARRIER);
+@@ -2972,6 +3004,17 @@ static int ext4_fill_super(struct super_
+               set_opt(sbi->s_mount_opt, BARRIER);
  
        /*
 +       * turn on extents feature by default in ext4 filesystem
index a01f42d..f16af50 100644 (file)
@@ -1,26 +1,26 @@
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-03-11 15:35:15.680343230 +0800
-+++ linux-stage/fs/ext4/super.c        2011-03-11 15:44:45.037632078 +0800
-@@ -55,6 +55,8 @@
- struct proc_dir_entry *ext4_proc_root;
- static struct kset *ext4_kset;
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -61,6 +61,8 @@ static struct ext4_lazy_init *ext4_li_in
+ static struct mutex ext4_li_mtx;
+ static struct ext4_features *ext4_feat;
  
 +static int force_over_128tb;
 +
  static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
                             unsigned long journal_devnum);
  static int ext4_commit_super(struct super_block *sb, int sync);
-@@ -1494,7 +1496,7 @@
+@@ -1180,7 +1182,7 @@ enum {
+       Opt_stripe, Opt_delalloc, Opt_nodelalloc,
        Opt_block_validity, Opt_noblock_validity,
        Opt_inode_readahead_blks, Opt_journal_ioprio,
-       Opt_discard, Opt_nodiscard,
 -      Opt_mballoc, Opt_bigendian_extents,
 +      Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
+       Opt_discard, Opt_nodiscard,
+       Opt_init_inode_table, Opt_noinit_inode_table,
  };
- static const match_table_t tokens = {
-@@ -1562,6 +1564,7 @@
+@@ -1253,6 +1255,7 @@ static const match_table_t tokens = {
        {Opt_auto_da_alloc, "auto_da_alloc"},
        {Opt_noauto_da_alloc, "noauto_da_alloc"},
        {Opt_bigendian_extents, "bigendian_extents"},
@@ -28,7 +28,7 @@ Index: linux-stage/fs/ext4/super.c
        {Opt_mballoc, "mballoc"},
        {Opt_discard, "discard"},
        {Opt_nodiscard, "nodiscard"},
-@@ -2008,6 +2011,9 @@
+@@ -1720,6 +1723,9 @@ set_qf_format:
                        break;
                case Opt_mballoc:
                        break;
@@ -38,7 +38,7 @@ Index: linux-stage/fs/ext4/super.c
                default:
                        ext4_msg(sb, KERN_ERR,
                               "Unrecognized mount option \"%s\" "
-@@ -3031,6 +3037,16 @@
+@@ -3137,6 +3143,16 @@ static int ext4_fill_super(struct super_
                goto failed_mount;
        }
  
index 8352d02..9043230 100644 (file)
@@ -1,8 +1,8 @@
-Index: linux-2.6.32-el6-beta/fs/ext4/ialloc.c
+Index: linux-stage/fs/ext4/ialloc.c
 ===================================================================
---- linux-2.6.32-el6-beta.orig/fs/ext4/ialloc.c
-+++ linux-2.6.32-el6-beta/fs/ext4/ialloc.c
-@@ -825,11 +825,15 @@ struct inode *ext4_new_inode(handle_t *h
+--- linux-stage.orig/fs/ext4/ialloc.c
++++ linux-stage/fs/ext4/ialloc.c
+@@ -834,11 +834,15 @@ struct inode *ext4_new_inode(handle_t *h
        sb = dir->i_sb;
        ngroups = ext4_get_groups_count(sb);
        trace_ext4_request_inode(dir, mode);
@@ -19,11 +19,11 @@ Index: linux-2.6.32-el6-beta/fs/ext4/ialloc.c
  
        if (!goal)
                goal = sbi->s_inode_goal;
-Index: linux-2.6.32-el6-beta/fs/ext4/super.c
+Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-2.6.32-el6-beta.orig/fs/ext4/super.c
-+++ linux-2.6.32-el6-beta/fs/ext4/super.c
-@@ -2601,6 +2601,7 @@ EXT4_RO_ATTR(lifetime_write_kbytes);
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -2348,6 +2348,7 @@ EXT4_RO_ATTR(lifetime_write_kbytes);
  EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
                 inode_readahead_blks_store, s_inode_readahead_blks);
  EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
@@ -31,7 +31,7 @@ Index: linux-2.6.32-el6-beta/fs/ext4/super.c
  EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats);
  EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
  EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
-@@ -2615,6 +2616,7 @@ static struct attribute *ext4_attrs[] = 
+@@ -2362,6 +2363,7 @@ static struct attribute *ext4_attrs[] = 
        ATTR_LIST(lifetime_write_kbytes),
        ATTR_LIST(inode_readahead_blks),
        ATTR_LIST(inode_goal),
@@ -39,21 +39,21 @@ Index: linux-2.6.32-el6-beta/fs/ext4/super.c
        ATTR_LIST(mb_stats),
        ATTR_LIST(mb_max_to_scan),
        ATTR_LIST(mb_min_to_scan),
-Index: linux-2.6.32-el6-beta/fs/ext4/ext4.h
+Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-2.6.32-el6-beta.orig/fs/ext4/ext4.h
-+++ linux-2.6.32-el6-beta/fs/ext4/ext4.h
-@@ -1029,6 +1029,8 @@ struct ext4_sb_info {
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -1138,6 +1138,8 @@ struct ext4_sb_info {
+       unsigned int s_log_groups_per_flex;
+       struct flex_groups *s_flex_groups;
  
-       /* Kernel thread for multiple mount protection */
-       struct task_struct *s_mmp_tsk;
-+
 +      unsigned long s_max_dir_size;
- };
++
+       /* workqueue for dio unwritten */
+       struct workqueue_struct *dio_unwritten_wq;
  
- static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
-@@ -1353,6 +1355,12 @@ struct mmp_struct {
- #define EXT4_MMP_MIN_CHECK_INTERVAL   5
+@@ -1598,6 +1600,12 @@ struct mmpd_data {
+ #define EXT4_MMP_MAX_CHECK_INTERVAL    300UL
  
  /*
 + * max directory size tunable
index c0b59f0..f0060f2 100644 (file)
@@ -1,10 +1,10 @@
 Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4.h    2011-03-14 16:18:28.300241437 +0800
-+++ linux-stage/fs/ext4/ext4.h 2011-03-14 16:33:17.056087375 +0800
-@@ -1770,6 +1770,7 @@
-       ext4_grpblk_t   bb_free;        /* total free blocks */
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -1959,6 +1959,7 @@ struct ext4_group_info {
        ext4_grpblk_t   bb_fragments;   /* nr of freespace fragments */
+       ext4_grpblk_t   bb_largest_free_order;/* order of largest frag in BG */
        struct          list_head bb_prealloc_list;
 +      unsigned long   bb_prealloc_nr;
  #ifdef DOUBLE_CHECK
@@ -12,8 +12,8 @@ Index: linux-stage/fs/ext4/ext4.h
  #endif
 Index: linux-stage/fs/ext4/mballoc.c
 ===================================================================
---- linux-stage.orig/fs/ext4/mballoc.c 2011-03-14 16:18:28.336242149 +0800
-+++ linux-stage/fs/ext4/mballoc.c      2011-03-14 16:33:27.072292006 +0800
+--- linux-stage.orig/fs/ext4/mballoc.c
++++ linux-stage/fs/ext4/mballoc.c
 @@ -337,7 +337,7 @@
  static struct kmem_cache *ext4_pspace_cachep;
  static struct kmem_cache *ext4_ac_cachep;
@@ -23,7 +23,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                                        ext4_group_t group);
  static void ext4_mb_generate_from_freelist(struct super_block *sb, void *bitmap,
                                                ext4_group_t group);
-@@ -659,7 +659,7 @@
+@@ -680,7 +680,7 @@ mb_set_largest_free_order(struct super_b
  }
  
  static noinline_for_stack
@@ -32,7 +32,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                                void *buddy, void *bitmap, ext4_group_t group)
  {
        struct ext4_group_info *grp = ext4_get_group_info(sb, group);
-@@ -691,14 +691,13 @@
+@@ -712,14 +712,13 @@ void ext4_mb_generate_buddy(struct super
        grp->bb_fragments = fragments;
  
        if (free != grp->bb_free) {
@@ -52,9 +52,9 @@ Index: linux-stage/fs/ext4/mballoc.c
 +                      grp->bb_prealloc_nr);
 +              return -EIO;
        }
+       mb_set_largest_free_order(sb, grp);
  
-       clear_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &(grp->bb_state));
-@@ -708,6 +707,8 @@
+@@ -730,6 +729,8 @@ void ext4_mb_generate_buddy(struct super
        EXT4_SB(sb)->s_mb_buddies_generated++;
        EXT4_SB(sb)->s_mb_generation_time += period;
        spin_unlock(&EXT4_SB(sb)->s_bal_lock);
@@ -63,25 +63,25 @@ Index: linux-stage/fs/ext4/mballoc.c
  }
  
  /* The buddy information is attached the buddy cache inode
-@@ -839,7 +840,7 @@
+@@ -876,7 +877,7 @@ static int ext4_mb_init_cache(struct pag
+       err = 0;
        first_block = page->index * blocks_per_page;
-       /* init the page  */
-       memset(page_address(page), 0xff, PAGE_CACHE_SIZE);
 -      for (i = 0; i < blocks_per_page; i++) {
 +      for (i = 0; i < blocks_per_page && err == 0; i++) {
                int group;
-               struct ext4_group_info *grinfo;
  
-@@ -874,7 +875,7 @@
-                        * incore got set to the group block bitmap below
-                        */
+               group = (first_block + i) >> 1;
+@@ -916,7 +917,7 @@ static int ext4_mb_init_cache(struct pag
                        ext4_lock_group(sb, group);
+                       /* init the buddy */
+                       memset(data, 0xff, blocksize);
 -                      ext4_mb_generate_buddy(sb, data, incore, group);
 +                      err = ext4_mb_generate_buddy(sb, data, incore, group);
                        ext4_unlock_group(sb, group);
                        incore = NULL;
                } else {
-@@ -888,7 +889,7 @@
+@@ -930,7 +931,7 @@ static int ext4_mb_init_cache(struct pag
                        memcpy(data, bitmap, blocksize);
  
                        /* mark all preallocated blks used in in-core bitmap */
@@ -90,7 +90,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                        ext4_mb_generate_from_freelist(sb, data, group);
                        ext4_unlock_group(sb, group);
  
-@@ -898,7 +899,8 @@
+@@ -940,7 +941,8 @@ static int ext4_mb_init_cache(struct pag
                        incore = data;
                }
        }
@@ -100,7 +100,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
  out:
        if (bh) {
-@@ -2142,9 +2144,11 @@
+@@ -2123,9 +2125,11 @@ static void *ext4_mb_seq_groups_next(str
  static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
  {
        struct super_block *sb = seq->private;
@@ -112,7 +112,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        struct ext4_buddy e4b;
        struct sg {
                struct ext4_group_info info;
-@@ -2153,10 +2157,10 @@
+@@ -2134,10 +2138,10 @@ static int ext4_mb_seq_groups_show(struc
  
        group--;
        if (group == 0)
@@ -125,7 +125,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                           "2^0", "2^1", "2^2", "2^3", "2^4", "2^5", "2^6",
                           "2^7", "2^8", "2^9", "2^10", "2^11", "2^12", "2^13");
  
-@@ -2167,13 +2171,20 @@
+@@ -2148,13 +2152,20 @@ static int ext4_mb_seq_groups_show(struc
                seq_printf(seq, "#%-5u: I/O error\n", group);
                return 0;
        }
@@ -148,7 +148,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        for (i = 0; i <= 13; i++)
                seq_printf(seq, " %-5u", i <= sb->s_blocksize_bits + 1 ?
                                sg.info.bb_counters[i] : 0);
-@@ -3354,23 +3365,68 @@
+@@ -3341,23 +3352,68 @@ static void ext4_mb_generate_from_freeli
  }
  
  /*
@@ -218,7 +218,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        /* all form of preallocation discards first load group,
         * so the only competing code is preallocation use.
         * we don't need any locking here
-@@ -3386,14 +3442,23 @@
+@@ -3373,14 +3429,23 @@ void ext4_mb_generate_from_pa(struct sup
                                             &groupnr, &start);
                len = pa->pa_len;
                spin_unlock(&pa->pa_lock);
@@ -243,7 +243,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  }
  
  static void ext4_mb_pa_callback(struct rcu_head *head)
-@@ -3452,6 +3517,7 @@
+@@ -3439,6 +3504,7 @@ static void ext4_mb_put_pa(struct ext4_a
         */
        ext4_lock_group(sb, grp);
        list_del(&pa->pa_group_list);
@@ -251,7 +251,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        ext4_unlock_group(sb, grp);
  
        spin_lock(pa->pa_obj_lock);
-@@ -3543,6 +3609,7 @@
+@@ -3530,6 +3596,7 @@ ext4_mb_new_inode_pa(struct ext4_allocat
  
        ext4_lock_group(sb, ac->ac_b_ex.fe_group);
        list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
@@ -259,7 +259,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
  
        spin_lock(pa->pa_obj_lock);
-@@ -3604,6 +3671,7 @@
+@@ -3591,6 +3658,7 @@ ext4_mb_new_group_pa(struct ext4_allocat
  
        ext4_lock_group(sb, ac->ac_b_ex.fe_group);
        list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
@@ -267,7 +267,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
  
        /*
-@@ -3802,6 +3870,8 @@
+@@ -3789,6 +3857,8 @@ repeat:
  
                spin_unlock(&pa->pa_lock);
  
@@ -276,7 +276,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                list_del(&pa->pa_group_list);
                list_add(&pa->u.pa_tmp_list, &list);
        }
-@@ -3942,7 +4012,7 @@
+@@ -3929,7 +3999,7 @@ repeat:
                if (err) {
                        ext4_error(sb, "Error loading buddy information for %u",
                                        group);
@@ -285,7 +285,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                }
  
                bitmap_bh = ext4_read_block_bitmap(sb, group);
-@@ -3954,6 +4024,8 @@
+@@ -3941,6 +4011,8 @@ repeat:
                }
  
                ext4_lock_group(sb, group);
@@ -294,7 +294,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                list_del(&pa->pa_group_list);
                ext4_mb_release_inode_pa(&e4b, bitmap_bh, pa, ac);
                ext4_unlock_group(sb, group);
-@@ -4227,6 +4299,7 @@
+@@ -4214,6 +4286,7 @@ ext4_mb_discard_lg_preallocations(struct
                }
                ext4_lock_group(sb, group);
                list_del(&pa->pa_group_list);
@@ -304,9 +304,9 @@ Index: linux-stage/fs/ext4/mballoc.c
  
 Index: linux-stage/fs/ext4/mballoc.h
 ===================================================================
---- linux-stage.orig/fs/ext4/mballoc.h 2011-03-14 16:18:26.670209322 +0800
-+++ linux-stage/fs/ext4/mballoc.h      2011-03-14 16:32:50.859552482 +0800
-@@ -88,7 +88,7 @@
+--- linux-stage.orig/fs/ext4/mballoc.h
++++ linux-stage/fs/ext4/mballoc.h
+@@ -88,7 +88,7 @@ extern u8 mb_enable_debug;
  /*
   * for which requests use 2^N search using buddies
   */
index f25ba7e..b5362c7 100644 (file)
@@ -1,8 +1,8 @@
 Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4.h    2011-05-20 10:59:32.000000000 +0300
-+++ linux-stage/fs/ext4/ext4.h 2011-05-20 11:01:06.000000000 +0300
-@@ -1191,6 +1191,9 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -1217,6 +1217,9 @@ EXT4_INODE_BIT_FNS(state, state_flags)
  
  #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
  
@@ -12,8 +12,8 @@ Index: linux-stage/fs/ext4/ext4.h
  /*
   * Codes for operating systems
   */
-@@ -1630,6 +1633,9 @@ extern void ext4_mb_put_buddy_cache_lock
-                                               ext4_group_t, int);
+@@ -1712,6 +1715,9 @@ extern void ext4_add_groupblocks(handle_
+                               ext4_fsblk_t block, unsigned long count);
  extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
  
 +extern void ext4_mb_discard_inode_preallocations(struct inode *);
@@ -24,8 +24,8 @@ Index: linux-stage/fs/ext4/ext4.h
                struct buffer_head *bh, ext4_fsblk_t blocknr);
 Index: linux-stage/fs/ext4/ext4_extents.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4_extents.h    2011-05-20 10:59:30.000000000 +0300
-+++ linux-stage/fs/ext4/ext4_extents.h 2011-05-20 11:00:01.000000000 +0300
+--- linux-stage.orig/fs/ext4/ext4_extents.h
++++ linux-stage/fs/ext4/ext4_extents.h
 @@ -58,6 +58,12 @@
   */
  #define EXT_STATS_
@@ -39,7 +39,7 @@ Index: linux-stage/fs/ext4/ext4_extents.h
  
  /*
   * ext4_inode has i_block array (60 bytes total).
-@@ -160,6 +166,7 @@ typedef int (*ext_prepare_callback)(stru
+@@ -163,6 +169,7 @@ typedef int (*ext_prepare_callback)(stru
  #define EXT_INIT_MAX_LEN      (1UL << 15)
  #define EXT_UNINIT_MAX_LEN    (EXT_INIT_MAX_LEN - 1)
  
@@ -47,7 +47,7 @@ Index: linux-stage/fs/ext4/ext4_extents.h
  
  #define EXT_FIRST_EXTENT(__hdr__) \
        ((struct ext4_extent *) (((char *) (__hdr__)) +         \
-@@ -239,6 +246,8 @@ extern int ext4_extent_tree_init(handle_
+@@ -242,6 +249,8 @@ extern int ext4_extent_tree_init(handle_
  extern int ext4_ext_calc_credits_for_single_extent(struct inode *inode,
                                                   int num,
                                                   struct ext4_ext_path *path);
@@ -58,8 +58,8 @@ Index: linux-stage/fs/ext4/ext4_extents.h
                                      struct ext4_extent *ex2);
 Index: linux-stage/fs/ext4/ext4_jbd2.c
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4_jbd2.c       2011-05-20 10:59:29.000000000 +0300
-+++ linux-stage/fs/ext4/ext4_jbd2.c    2011-05-20 11:00:01.000000000 +0300
+--- linux-stage.orig/fs/ext4/ext4_jbd2.c
++++ linux-stage/fs/ext4/ext4_jbd2.c
 @@ -31,6 +31,7 @@ int __ext4_journal_get_write_access(cons
        }
        return err;
@@ -75,8 +75,8 @@ Index: linux-stage/fs/ext4/ext4_jbd2.c
 +EXPORT_SYMBOL(__ext4_handle_dirty_metadata);
 Index: linux-stage/fs/ext4/ext4_jbd2.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4_jbd2.h       2011-05-20 10:59:29.000000000 +0300
-+++ linux-stage/fs/ext4/ext4_jbd2.h    2011-05-20 11:00:01.000000000 +0300
+--- linux-stage.orig/fs/ext4/ext4_jbd2.h
++++ linux-stage/fs/ext4/ext4_jbd2.h
 @@ -35,6 +35,8 @@
        (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)   \
         ? 27U : 8U)
@@ -146,7 +146,7 @@ Index: linux-stage/fs/ext4/extents.c
   * How many index/leaf blocks need to change/allocate to modify nrblocks?
   *
   * if nrblocks are fit in a single extent (chunk flag is 1), then
-@@ -4029,3 +4079,14 @@ int ext4_fiemap(struct inode *inode, str
+@@ -3975,3 +4024,14 @@ int ext4_fiemap(struct inode *inode, str
        return error;
  }
  
@@ -161,12 +161,11 @@ Index: linux-stage/fs/ext4/extents.c
 +EXPORT_SYMBOL(ext4_ext_walk_space);
 +EXPORT_SYMBOL(ext4_ext_find_extent);
 +EXPORT_SYMBOL(ext4_ext_drop_refs);
-+
 Index: linux-stage/fs/ext4/inode.c
 ===================================================================
---- linux-stage.orig/fs/ext4/inode.c   2011-05-20 10:59:31.000000000 +0300
-+++ linux-stage/fs/ext4/inode.c        2011-05-20 11:00:01.000000000 +0300
-@@ -5249,6 +5249,7 @@ bad_inode:
+--- linux-stage.orig/fs/ext4/inode.c
++++ linux-stage/fs/ext4/inode.c
+@@ -5260,6 +5260,7 @@ bad_inode:
        iget_failed(inode);
        return ERR_PTR(ret);
  }
@@ -176,9 +175,9 @@ Index: linux-stage/fs/ext4/inode.c
                                struct ext4_inode *raw_inode,
 Index: linux-stage/fs/ext4/mballoc.c
 ===================================================================
---- linux-stage.orig/fs/ext4/mballoc.c 2011-05-20 10:59:32.000000000 +0300
-+++ linux-stage/fs/ext4/mballoc.c      2011-05-20 11:00:01.000000000 +0300
-@@ -4044,6 +4044,7 @@ repeat:
+--- linux-stage.orig/fs/ext4/mballoc.c
++++ linux-stage/fs/ext4/mballoc.c
+@@ -4026,6 +4026,7 @@ repeat:
        if (ac)
                kmem_cache_free(ext4_ac_cachep, ac);
  }
@@ -186,7 +185,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
  /*
   * finds all preallocated spaces and return blocks being freed to them
-@@ -5029,3 +5030,6 @@ int ext4_trim_fs(struct super_block *sb,
+@@ -5138,3 +5139,6 @@ int ext4_trim_fs(struct super_block *sb,
  
        return ret;
  }
@@ -195,9 +194,9 @@ Index: linux-stage/fs/ext4/mballoc.c
 +
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-05-20 10:59:31.000000000 +0300
-+++ linux-stage/fs/ext4/super.c        2011-05-20 11:00:01.000000000 +0300
-@@ -128,6 +128,7 @@ __u32 ext4_itable_unused_count(struct su
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -137,6 +137,7 @@ __u32 ext4_itable_unused_count(struct su
                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
                 (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
  }
@@ -205,7 +204,7 @@ Index: linux-stage/fs/ext4/super.c
  
  void ext4_block_bitmap_set(struct super_block *sb,
                           struct ext4_group_desc *bg, ext4_fsblk_t blk)
-@@ -1500,11 +1501,13 @@ enum {
+@@ -1172,10 +1173,12 @@ enum {
        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
        Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
@@ -214,12 +213,11 @@ Index: linux-stage/fs/ext4/super.c
        Opt_stripe, Opt_delalloc, Opt_nodelalloc,
        Opt_block_validity, Opt_noblock_validity,
        Opt_inode_readahead_blks, Opt_journal_ioprio,
-       Opt_discard, Opt_nodiscard,
 +      Opt_mballoc,
+       Opt_discard, Opt_nodiscard,
+       Opt_init_inode_table, Opt_noinit_inode_table,
  };
- static const match_table_t tokens = {
-@@ -1556,6 +1559,9 @@ static const match_table_t tokens = {
+@@ -1229,6 +1232,9 @@ static const match_table_t tokens = {
        {Opt_noquota, "noquota"},
        {Opt_quota, "quota"},
        {Opt_usrquota, "usrquota"},
@@ -229,15 +227,15 @@ Index: linux-stage/fs/ext4/super.c
        {Opt_barrier, "barrier=%u"},
        {Opt_barrier, "barrier"},
        {Opt_nobarrier, "nobarrier"},
-@@ -1571,6 +1577,7 @@ static const match_table_t tokens = {
+@@ -1244,6 +1250,7 @@ static const match_table_t tokens = {
        {Opt_auto_da_alloc, "auto_da_alloc=%u"},
        {Opt_auto_da_alloc, "auto_da_alloc"},
        {Opt_noauto_da_alloc, "noauto_da_alloc"},
 +      {Opt_mballoc, "mballoc"},
        {Opt_discard, "discard"},
        {Opt_nodiscard, "nodiscard"},
-       {Opt_err, NULL},
-@@ -1928,6 +1935,10 @@ set_qf_format:
+       {Opt_init_inode_table, "init_itable=%u"},
+@@ -1604,6 +1611,10 @@ set_qf_format:
                        else
                                clear_opt(sbi->s_mount_opt, BARRIER);
                        break;
@@ -248,9 +246,9 @@ Index: linux-stage/fs/ext4/super.c
                case Opt_ignore:
                        break;
                case Opt_resize:
-@@ -2011,6 +2022,8 @@ set_qf_format:
-               case Opt_nodiscard:
-                       clear_opt(sbi->s_mount_opt, DISCARD);
+@@ -1701,6 +1712,8 @@ set_qf_format:
+               case Opt_noinit_inode_table:
+                       clear_opt(sbi->s_mount_opt, INIT_INODE_TABLE);
                        break;
 +              case Opt_mballoc:
 +                      break;
index e2942a9..b7207d0 100644 (file)
@@ -35,7 +35,7 @@ Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
 --- linux-stage.orig/fs/ext4/ext4.h
 +++ linux-stage/fs/ext4/ext4.h
-@@ -893,7 +893,7 @@ struct ext4_super_block {
+@@ -973,7 +973,7 @@ struct ext4_super_block {
        __le16  s_want_extra_isize;     /* New inodes should reserve # bytes */
        __le32  s_flags;                /* Miscellaneous flags */
        __le16  s_raid_stride;          /* RAID stride */
@@ -44,17 +44,17 @@ Index: linux-stage/fs/ext4/ext4.h
        __le64  s_mmp_block;            /* Block for multi-mount protection */
        __le32  s_raid_stripe_width;    /* blocks on all data disks (N*stride)*/
        __u8    s_log_groups_per_flex;  /* FLEX_BG group size */
-@@ -1040,6 +1040,9 @@ struct ext4_sb_info {
-       /* workqueue for dio unwritten */
-       struct workqueue_struct *dio_unwritten_wq;
+@@ -1145,6 +1145,9 @@ struct ext4_sb_info {
+       struct ext4_li_request *s_li_request;
+       /* Wait multiplier for lazy initialization thread */
+       unsigned int s_li_wait_mult;
 +
 +      /* Kernel thread for multiple mount protection */
 +      struct task_struct *s_mmp_tsk;
  };
  
  static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
-@@ -1176,7 +1179,8 @@ static inline void ext4_clear_inode_stat
+@@ -1283,7 +1286,8 @@ EXT4_INODE_BIT_FNS(state, state_flags)
                                         EXT4_FEATURE_INCOMPAT_META_BG| \
                                         EXT4_FEATURE_INCOMPAT_EXTENTS| \
                                         EXT4_FEATURE_INCOMPAT_64BIT| \
@@ -64,8 +64,8 @@ Index: linux-stage/fs/ext4/ext4.h
  #define EXT4_FEATURE_RO_COMPAT_SUPP   (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
                                         EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
-@@ -1383,6 +1387,67 @@ void ext4_get_group_no_and_offset(struct
extern struct proc_dir_entry *ext4_proc_root;
+@@ -1533,6 +1537,67 @@ struct ext4_features {
};
  
  /*
 + * This structure will be used for multiple mount protection. It will be
@@ -132,7 +132,7 @@ Index: linux-stage/fs/ext4/ext4.h
   * Function prototypes
   */
  
-@@ -1552,6 +1617,10 @@ extern void __ext4_warning(struct super_
+@@ -1703,6 +1768,10 @@ extern void __ext4_warning(struct super_
  #define ext4_warning(sb, message...)  __ext4_warning(sb, __func__, ## message)
  extern void ext4_msg(struct super_block *, const char *, const char *, ...)
        __attribute__ ((format (printf, 3, 4)));
@@ -143,7 +143,7 @@ Index: linux-stage/fs/ext4/ext4.h
  extern void ext4_grp_locked_error(struct super_block *, ext4_group_t,
                                const char *, const char *, ...)
        __attribute__ ((format (printf, 4, 5)));
-@@ -1833,6 +1902,8 @@ extern int ext4_move_extents(struct file
+@@ -1986,6 +2055,8 @@ extern int ext4_move_extents(struct file
                             __u64 start_orig, __u64 start_donor,
                             __u64 len, __u64 *moved_len);
  
@@ -519,9 +519,9 @@ Index: linux-stage/fs/ext4/super.c
 +#include <linux/kthread.h>
 +#include <linux/utsname.h>
  
- #include "ext4.h"
- #include "ext4_jbd2.h"
-@@ -700,6 +702,8 @@ static void ext4_put_super(struct super_
+ #include <linux/kthread.h>
+ #include <linux/freezer.h>
+@@ -712,6 +714,8 @@ static void ext4_put_super(struct super_
                invalidate_bdev(sbi->journal_bdev);
                ext4_blkdev_remove(sbi);
        }
@@ -530,7 +530,7 @@ Index: linux-stage/fs/ext4/super.c
        sb->s_fs_info = NULL;
        /*
         * Now that we are completely done shutting down the
-@@ -2799,6 +2803,10 @@ static int ext4_fill_super(struct super_
+@@ -3235,6 +3239,10 @@ static int ext4_fill_super(struct super_
        needs_recovery = (es->s_last_orphan != 0 ||
                          EXT4_HAS_INCOMPAT_FEATURE(sb,
                                    EXT4_FEATURE_INCOMPAT_RECOVER));
@@ -541,7 +541,7 @@ Index: linux-stage/fs/ext4/super.c
  
        /*
         * The first inode we look at is the journal inode.  Don't try
-@@ -3036,6 +3044,8 @@ failed_mount3:
+@@ -3478,6 +3486,8 @@ failed_mount3:
        percpu_counter_destroy(&sbi->s_freeinodes_counter);
        percpu_counter_destroy(&sbi->s_dirs_counter);
        percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
@@ -550,7 +550,7 @@ Index: linux-stage/fs/ext4/super.c
  failed_mount2:
        for (i = 0; i < db_count; i++)
                brelse(sbi->s_group_desc[i]);
-@@ -3544,7 +3554,7 @@ static int ext4_remount(struct super_blo
+@@ -3986,7 +3996,7 @@ static int ext4_remount(struct super_blo
        struct ext4_mount_options old_opts;
        ext4_group_t g;
        unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
@@ -559,7 +559,7 @@ Index: linux-stage/fs/ext4/super.c
  #ifdef CONFIG_QUOTA
        int i;
  #endif
-@@ -3666,6 +3676,13 @@ static int ext4_remount(struct super_blo
+@@ -4108,6 +4118,13 @@ static int ext4_remount(struct super_blo
                                goto restore_opts;
                        if (!ext4_setup_super(sb, es, 0))
                                sb->s_flags &= ~MS_RDONLY;
@@ -572,4 +572,4 @@ Index: linux-stage/fs/ext4/super.c
 +                              }
                }
        }
-       ext4_setup_system_zone(sb);
index 70023d6..6074545 100644 (file)
@@ -1,8 +1,8 @@
 Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
---- linux-stage.orig/fs/ext4/ext4.h    2011-03-11 14:17:02.000000000 +0800
-+++ linux-stage/fs/ext4/ext4.h 2011-03-11 14:20:08.269063193 +0800
-@@ -999,11 +999,14 @@
+--- linux-stage.orig/fs/ext4/ext4.h
++++ linux-stage/fs/ext4/ext4.h
+@@ -1100,11 +1100,14 @@ struct ext4_sb_info {
  
        /* tunables */
        unsigned long s_stripe;
@@ -18,26 +18,12 @@ Index: linux-stage/fs/ext4/ext4.h
        unsigned int s_mb_group_prealloc;
        unsigned int s_max_writeback_mb_bump;
        /* where last allocation was done - for stream allocation */
-Index: linux-stage/fs/ext4/inode.c
-===================================================================
-@@ -3028,6 +3028,11 @@ static int ext4_da_writepages(struct add
-       if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED))
-               return -EROFS;
-+      if (wbc->nr_to_write < sbi->s_mb_small_req) {
-+              nr_to_writebump = sbi->s_mb_small_req - wbc->nr_to_write;
-+              wbc->nr_to_write = sbi->s_mb_small_req;
-+      }
-+
-       if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
-               range_whole = 1;
-
 Index: linux-stage/fs/ext4/mballoc.c
 ===================================================================
---- linux-stage.orig/fs/ext4/mballoc.c 2011-03-11 14:03:32.000000000 +0800
-+++ linux-stage/fs/ext4/mballoc.c      2011-03-11 14:44:49.106543493 +0800
-@@ -1823,6 +1823,26 @@
-       }
+--- linux-stage.orig/fs/ext4/mballoc.c
++++ linux-stage/fs/ext4/mballoc.c
+@@ -1838,6 +1838,25 @@ void ext4_mb_complex_scan_group(struct e
+       ext4_mb_check_limits(ac, e4b, 1);
  }
  
 +static void ext4_mb_prealloc_table_add(struct ext4_sb_info *sbi, int value)
@@ -59,11 +45,10 @@ Index: linux-stage/fs/ext4/mballoc.c
 +      }
 +}
 +
-+
- static int ext4_mb_good_group(struct ext4_allocation_context *ac,
-                               ext4_group_t group, int cr)
- {
-@@ -2173,6 +2193,80 @@
+ /*
+  * This is a special case for storages like raid5
+  * we try to find stripe-aligned chunks for stripe-size requests
+@@ -2155,6 +2174,80 @@ static const struct seq_operations ext4_
        .show   = ext4_mb_seq_groups_show,
  };
  
@@ -144,7 +129,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  static int ext4_mb_seq_groups_open(struct inode *inode, struct file *file)
  {
        struct super_block *sb = PDE(inode)->data;
-@@ -2411,12 +2505,56 @@
+@@ -2394,12 +2487,56 @@ int ext4_mb_init(struct super_block *sb,
        sbi->s_mb_max_to_scan = MB_DEFAULT_MAX_TO_SCAN;
        sbi->s_mb_min_to_scan = MB_DEFAULT_MIN_TO_SCAN;
        sbi->s_mb_stats = MB_DEFAULT_STATS;
@@ -203,7 +188,7 @@ Index: linux-stage/fs/ext4/mballoc.c
                kfree(sbi->s_mb_offsets);
                kfree(sbi->s_mb_maxs);
                return -ENOMEM;
-@@ -2430,9 +2568,18 @@
+@@ -2413,9 +2550,18 @@ int ext4_mb_init(struct super_block *sb,
                spin_lock_init(&lg->lg_prealloc_lock);
        }
  
@@ -223,7 +208,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
        if (sbi->s_journal)
                sbi->s_journal->j_commit_callback = release_blocks_on_commit;
-@@ -2512,8 +2659,10 @@
+@@ -2495,8 +2641,10 @@ int ext4_mb_release(struct super_block *
        }
  
        free_percpu(sbi->s_locality_groups);
@@ -235,7 +220,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
        return 0;
  }
-@@ -2807,11 +2956,12 @@
+@@ -2795,11 +2943,12 @@ static noinline_for_stack void
  ext4_mb_normalize_request(struct ext4_allocation_context *ac,
                                struct ext4_allocation_request *ar)
  {
@@ -250,7 +235,7 @@ Index: linux-stage/fs/ext4/mballoc.c
        struct ext4_prealloc_space *pa;
  
        /* do normalize only data requests, metadata requests
-@@ -2841,49 +2991,35 @@
+@@ -2829,49 +2978,35 @@ ext4_mb_normalize_request(struct ext4_al
        size = size << bsbits;
        if (size < i_size_read(ac->ac_inode))
                size = i_size_read(ac->ac_inode);
@@ -325,7 +310,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
        /* don't cover already allocated blocks in selected range */
        if (ar->pleft && start <= ar->lleft) {
-@@ -2955,7 +3091,6 @@
+@@ -2943,7 +3078,6 @@ ext4_mb_normalize_request(struct ext4_al
        }
        BUG_ON(start + size <= ac->ac_o_ex.fe_logical &&
                        start > ac->ac_o_ex.fe_logical);
@@ -333,7 +318,7 @@ Index: linux-stage/fs/ext4/mballoc.c
  
        /* now prepare goal request */
  
-@@ -3939,11 +4074,19 @@
+@@ -3927,11 +4061,19 @@ static void ext4_mb_group_or_file(struct
  
        /* don't use group allocation for large files */
        size = max(size, isize);
@@ -356,9 +341,9 @@ Index: linux-stage/fs/ext4/mballoc.c
         * locality group prealloc space are per cpu. The reason for having
 Index: linux-stage/fs/ext4/super.c
 ===================================================================
---- linux-stage.orig/fs/ext4/super.c   2011-03-11 14:16:56.000000000 +0800
-+++ linux-stage/fs/ext4/super.c        2011-03-11 14:19:24.664467626 +0800
-@@ -2632,7 +2632,8 @@
+--- linux-stage.orig/fs/ext4/super.c
++++ linux-stage/fs/ext4/super.c
+@@ -2353,7 +2353,8 @@ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats
  EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
  EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
  EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
@@ -368,7 +353,7 @@ Index: linux-stage/fs/ext4/super.c
  EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
  EXT4_RW_ATTR_SBI_UI(max_writeback_mb_bump, s_max_writeback_mb_bump);
  
-@@ -2647,7 +2648,8 @@
+@@ -2368,7 +2369,8 @@ static struct attribute *ext4_attrs[] = 
        ATTR_LIST(mb_max_to_scan),
        ATTR_LIST(mb_min_to_scan),
        ATTR_LIST(mb_order2_req),
@@ -378,3 +363,19 @@ Index: linux-stage/fs/ext4/super.c
        ATTR_LIST(mb_group_prealloc),
        ATTR_LIST(max_writeback_mb_bump),
        NULL,
+Index: linux-stage/fs/ext4/inode.c
+===================================================================
+--- linux-stage.orig/fs/ext4/inode.c
++++ linux-stage/fs/ext4/inode.c
+@@ -3049,6 +3049,11 @@ static int ext4_da_writepages(struct add
+       if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED))
+               return -EROFS;
++      if (wbc->nr_to_write < sbi->s_mb_small_req) {
++              nr_to_writebump = sbi->s_mb_small_req - wbc->nr_to_write;
++              wbc->nr_to_write = sbi->s_mb_small_req;
++      }
++
+       if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
+               range_whole = 1;
index 61f4119..f22ca04 100644 (file)
@@ -36,17 +36,17 @@ Index: linux-stage/fs/ext4/dir.c
        const int rlen = ext4_rec_len_from_disk(de->rec_len,
                                                dir->i_sb->s_blocksize);
  
--      if (rlen < EXT4_DIR_REC_LEN(1))
-+      if (rlen < __EXT4_DIR_REC_LEN(1))
+-      if (unlikely(rlen < EXT4_DIR_REC_LEN(1)))
++      if (unlikely(rlen < __EXT4_DIR_REC_LEN(1)))
                error_msg = "rec_len is smaller than minimal";
-       else if (rlen % 4 != 0)
+       else if (unlikely(rlen % 4 != 0))
                error_msg = "rec_len % 4 != 0";
--      else if (rlen < EXT4_DIR_REC_LEN(de->name_len))
-+      else if (rlen < EXT4_DIR_REC_LEN(de))
+-      else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
++      else if (unlikely(rlen < EXT4_DIR_REC_LEN(de)))
                error_msg = "rec_len is too small for name_len";
-       else if (((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize)
+       else if (unlikely(((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize))
                error_msg = "directory entry across blocks";
-@@ -182,7 +189,7 @@ revalidate:
+@@ -183,7 +190,7 @@ revalidate:
                                 * failure will be detected in the
                                 * dirent test below. */
                                if (ext4_rec_len_from_disk(de->rec_len,
@@ -55,7 +55,7 @@ Index: linux-stage/fs/ext4/dir.c
                                        break;
                                i += ext4_rec_len_from_disk(de->rec_len,
                                                            sb->s_blocksize);
-@@ -345,12 +352,17 @@ int ext4_htree_store_dirent(struct file 
+@@ -346,12 +353,17 @@ int ext4_htree_store_dirent(struct file 
        struct fname *fname, *new_fn;
        struct dir_private_info *info;
        int len;
@@ -74,7 +74,7 @@ Index: linux-stage/fs/ext4/dir.c
        new_fn = kzalloc(len, GFP_KERNEL);
        if (!new_fn)
                return -ENOMEM;
-@@ -359,7 +371,7 @@ int ext4_htree_store_dirent(struct file 
+@@ -360,7 +372,7 @@ int ext4_htree_store_dirent(struct file 
        new_fn->inode = le32_to_cpu(dirent->inode);
        new_fn->name_len = dirent->name_len;
        new_fn->file_type = dirent->file_type;
@@ -87,7 +87,7 @@ Index: linux-stage/fs/ext4/ext4.h
 ===================================================================
 --- linux-stage.orig/fs/ext4/ext4.h
 +++ linux-stage/fs/ext4/ext4.h
-@@ -1267,6 +1267,7 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+@@ -1293,6 +1293,7 @@ EXT4_INODE_BIT_FNS(state, state_flags)
  #define EXT4_FEATURE_INCOMPAT_64BIT           0x0080
  #define EXT4_FEATURE_INCOMPAT_MMP               0x0100
  #define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
@@ -95,7 +95,7 @@ Index: linux-stage/fs/ext4/ext4.h
  
  #define EXT4_FEATURE_COMPAT_SUPP      EXT2_FEATURE_COMPAT_EXT_ATTR
  #define EXT4_FEATURE_INCOMPAT_SUPP    (EXT4_FEATURE_INCOMPAT_FILETYPE| \
-@@ -1275,7 +1276,9 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+@@ -1301,7 +1302,9 @@ EXT4_INODE_BIT_FNS(state, state_flags)
                                         EXT4_FEATURE_INCOMPAT_EXTENTS| \
                                         EXT4_FEATURE_INCOMPAT_64BIT| \
                                         EXT4_FEATURE_INCOMPAT_FLEX_BG| \
@@ -106,7 +106,7 @@ Index: linux-stage/fs/ext4/ext4.h
  #define EXT4_FEATURE_RO_COMPAT_SUPP   (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
                                         EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
                                         EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
-@@ -1357,6 +1360,43 @@ struct ext4_dir_entry_2 {
+@@ -1387,6 +1390,43 @@ struct ext4_dir_entry_2 {
  #define EXT4_FT_SYMLINK               7
  
  #define EXT4_FT_MAX           8
@@ -150,7 +150,7 @@ Index: linux-stage/fs/ext4/ext4.h
  
  /*
   * EXT4_DIR_PAD defines the directory entries boundaries
-@@ -1365,8 +1405,11 @@ struct ext4_dir_entry_2 {
+@@ -1395,8 +1435,11 @@ struct ext4_dir_entry_2 {
   */
  #define EXT4_DIR_PAD                  4
  #define EXT4_DIR_ROUND                        (EXT4_DIR_PAD - 1)
@@ -163,7 +163,7 @@ Index: linux-stage/fs/ext4/ext4.h
  #define EXT4_MAX_REC_LEN              ((1<<16)-1)
  
  static inline unsigned int
-@@ -1726,7 +1769,7 @@ extern struct buffer_head * ext4_find_en
+@@ -1786,7 +1829,7 @@ extern struct buffer_head * ext4_find_en
                                            struct ext4_dir_entry_2 ** res_dir);
  #define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir)
  extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
@@ -172,7 +172,7 @@ Index: linux-stage/fs/ext4/ext4.h
  extern struct buffer_head *ext4_append(handle_t *handle,
                                       struct inode *inode,
                                       ext4_lblk_t *block, int *err);
-@@ -2069,6 +2112,28 @@ extern wait_queue_head_t aio_wq[];
+@@ -2130,6 +2173,28 @@ extern wait_queue_head_t aio_wq[];
  #define to_aio_wq(v) (&aio_wq[((unsigned long)v) % WQ_HASH_SZ])
  extern void ext4_aio_wait(struct inode *inode);
  
@@ -431,7 +431,7 @@ Index: linux-stage/fs/ext4/namei.c
  
  out_journal:
        if (journal) {
-@@ -1978,12 +2013,13 @@ retry:
+@@ -1977,12 +2012,13 @@ retry:
  /* Initialize @inode as a subdirectory of @dir, and add the
   * "." and ".." entries into the first directory block. */
  int ext4_add_dot_dotdot(handle_t *handle, struct inode * dir,
@@ -447,7 +447,7 @@ Index: linux-stage/fs/ext4/namei.c
  
        if (IS_ERR(handle))
                return PTR_ERR(handle);
-@@ -1996,28 +2032,40 @@ int ext4_add_dot_dotdot(handle_t *handle
+@@ -1995,28 +2031,40 @@ int ext4_add_dot_dotdot(handle_t *handle
        inode->i_fop = &ext4_dir_operations;
        inode->i_size = EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize;
        dir_block = ext4_bread(handle, inode, 0, 1, &err);
@@ -496,7 +496,7 @@ Index: linux-stage/fs/ext4/namei.c
        inode->i_nlink = 2;
        BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata");
        ext4_handle_dirty_metadata(handle, dir, dir_block);
-@@ -2054,9 +2102,12 @@ retry:
+@@ -2053,9 +2101,12 @@ retry:
        if (IS_ERR(inode))
                goto out_stop;
  
@@ -510,7 +510,7 @@ Index: linux-stage/fs/ext4/namei.c
                goto out_stop;
        }
  
-@@ -2092,7 +2143,7 @@ static int empty_dir(struct inode *inode
+@@ -2091,7 +2142,7 @@ static int empty_dir(struct inode *inode
        int err = 0;
  
        sb = inode->i_sb;
index d9331de..be350d4 100644 (file)
@@ -1,6 +1,6 @@
 ext4-wantedi-2.6-rhel6.patch
 ext4-map_inode_page-2.6.18-rhel5.patch
-export-ext4-2.6-rhel5.patch
+export-ext4-2.6-rhel6.patch
 ext4-remove-cond_resched-calls-rhel5.patch
 ext4-nlink-2.6-rhel5.patch
 ext4-ext_generation-sles11.patch
index 2bf266a..a5c9459 100644 (file)
@@ -1,12 +1,12 @@
-09-16-2011 Whamcloud, Inc.
+09-30-2011 Whamcloud, Inc.
        * version 2.1.0
        * Server support for kernels:
          2.6.18-274.12.1.el5 (RHEL5)
-         2.6.32-131.6.1.el6 (RHEL6)
+         2.6.32-220.el6 (RHEL6)
        * Client support for unpatched kernels:
          (see http://wiki.lustre.org/index.php?title=Patchless_Client)
          2.6.18-274.12.1.el5 (RHEL5)
-         2.6.32-131.6.1.el6 (RHEL6)
+         2.6.32-220.el6 (RHEL6)
          2.6.29.4-167.fc11  (FC11)
          2.6.16.60-0.69.1 (SLES10)
          2.6.27.19-5      (SLES11)
          mounted with "32bitapi" mount option
 
 Severity   : enhancement
+Jira       : LU-751
+Description: Update RHEL6.2 kernel to 2.6.32-220.el6
+
+Severity   : enhancement
 Jira       : LU-674
 Description: Kernel update [RHEL5.7 2.6.18-274.12.1.el5]
 
index 3147e78..930f504 100644 (file)
@@ -1004,22 +1004,25 @@ LB_LINUX_TRY_COMPILE([
 
 #
 # LC_STATFS_DENTRY_PARAM
-# starting from 2.6.18 linux kernel uses dentry instead of
-# super_block for first vfs_statfs argument
+# starting from 2.6.18 linux kernel uses dentry instead of super_block
+# for the first parameter of the super_operations->statfs() callback.
 #
 AC_DEFUN([LC_STATFS_DENTRY_PARAM],
-[AC_MSG_CHECKING([first vfs_statfs parameter is dentry])
+[AC_MSG_CHECKING([if super_ops.statfs() first parameter is dentry])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
 LB_LINUX_TRY_COMPILE([
         #include <linux/fs.h>
 ],[
-       int vfs_statfs(struct dentry *, struct kstatfs *);
+       ((struct super_operations *)0)->statfs((struct dentry *)0, (struct kstatfs*)0);
 ],[
         AC_DEFINE(HAVE_STATFS_DENTRY_PARAM, 1,
-                [first parameter of vfs_statfs is dentry])
+                [super_ops.statfs() first parameter is dentry])
         AC_MSG_RESULT([yes])
 ],[
         AC_MSG_RESULT([no])
 ])
+EXTRA_KCFLAGS="$tmp_flags"
 ])
 
 #
index 04cd1ae..e48692d 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.32
-# Sun Jul  5 23:04:09 2011
+# Tue Dec 20 23:41:08 2011
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -100,6 +100,7 @@ CONFIG_LOG_BUF_SHIFT=19
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 CONFIG_GROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
 CONFIG_RT_GROUP_SCHED=y
 # CONFIG_USER_SCHED is not set
 CONFIG_CGROUP_SCHED=y
@@ -116,6 +117,7 @@ CONFIG_CGROUP_MEM_RES_CTLR=y
 CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
 CONFIG_BLK_CGROUP=y
 # CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_CGROUP_PERF=y
 CONFIG_SCHED_AUTOGROUP=y
 CONFIG_MM_OWNER=y
 # CONFIG_SYSFS_DEPRECATED_V2 is not set
@@ -211,6 +213,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_LBDAF=y
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
 
@@ -251,7 +254,7 @@ CONFIG_X86_32_NON_STANDARD=y
 CONFIG_SCHED_OMIT_FRAME_POINTER=y
 CONFIG_PARAVIRT_GUEST=y
 CONFIG_XEN=y
-CONFIG_XEN_MAX_DOMAIN_MEMORY=8
+CONFIG_XEN_MAX_DOMAIN_MEMORY=128
 CONFIG_XEN_SAVE_RESTORE=y
 CONFIG_XEN_DEBUG_FS=y
 # CONFIG_VMI is not set
@@ -453,9 +456,10 @@ CONFIG_ACPI_CONTAINER=y
 CONFIG_ACPI_HOTPLUG_MEMORY=y
 # CONFIG_ACPI_HOTPLUG_MEMORY_AUTO_ONLINE is not set
 CONFIG_ACPI_SBS=m
-CONFIG_ACPI_HED=m
+CONFIG_ACPI_HED=y
 CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=m
+CONFIG_ACPI_APEI_GHES=y
+CONFIG_ACPI_APEI_PCIEAER=y
 CONFIG_ACPI_APEI_EINJ=m
 CONFIG_ACPI_APEI_ERST_DEBUG=m
 CONFIG_SFI=y
@@ -553,7 +557,7 @@ CONFIG_ISA=y
 # CONFIG_MCA is not set
 # CONFIG_SCx200 is not set
 CONFIG_OLPC=y
-CONFIG_K8_NB=y
+CONFIG_AMD_NB=y
 CONFIG_PCCARD=y
 # CONFIG_PCMCIA_DEBUG is not set
 CONFIG_PCMCIA=y
@@ -736,6 +740,7 @@ CONFIG_NETFILTER_XT_TARGET_TRACE=m
 CONFIG_NETFILTER_XT_TARGET_SECMARK=m
 CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
 CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_SET=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -772,6 +777,18 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
 CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 CONFIG_NETFILTER_XT_MATCH_OSF=m
+CONFIG_IP_SET=m
+CONFIG_IP_SET_MAX=256
+CONFIG_IP_SET_BITMAP_IP=m
+CONFIG_IP_SET_BITMAP_IPMAC=m
+CONFIG_IP_SET_BITMAP_PORT=m
+CONFIG_IP_SET_HASH_IP=m
+CONFIG_IP_SET_HASH_IPPORT=m
+CONFIG_IP_SET_HASH_IPPORTIP=m
+CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETPORT=m
+CONFIG_IP_SET_LIST_SET=m
 CONFIG_IP_VS=m
 CONFIG_IP_VS_IPV6=y
 # CONFIG_IP_VS_DEBUG is not set
@@ -1425,9 +1442,6 @@ CONFIG_FCOE_FNIC=m
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 CONFIG_SCSI_ISCI=m
-# CONFIG_PBG_HBA_BETA is not set
-CONFIG_PBG_HBA_A2=y
-# CONFIG_PBG_HBA_A0 is not set
 # CONFIG_SCSI_GENERIC_NCR5380 is not set
 # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
 CONFIG_SCSI_IPS=m
@@ -1566,6 +1580,7 @@ CONFIG_DM_DEBUG=y
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
+CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
 CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
@@ -1575,11 +1590,19 @@ CONFIG_DM_DELAY=m
 CONFIG_DM_REPLICATOR=m
 CONFIG_DM_RAID45=m
 CONFIG_DM_UEVENT=y
+CONFIG_DM_FLAKEY=m
+CONFIG_TARGET_CORE=m
+CONFIG_TCM_IBLOCK=m
+CONFIG_TCM_FILEIO=m
+CONFIG_TCM_PSCSI=m
+CONFIG_LOOPBACK_TARGET=m
+# CONFIG_LOOPBACK_TARGET_CDB_DEBUG is not set
+CONFIG_TCM_FC=m
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
 CONFIG_FUSION_FC=m
 CONFIG_FUSION_SAS=m
-CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_MAX_SGE=256
 CONFIG_FUSION_CTL=m
 CONFIG_FUSION_LAN=m
 CONFIG_FUSION_LOGGING=y
@@ -2352,7 +2375,8 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
 # CONFIG_LEGACY_PTYS is not set
 CONFIG_CRASH=y
-# CONFIG_PRINTER is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
 CONFIG_PPDEV=m
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_IRQ=y
@@ -2493,7 +2517,7 @@ CONFIG_WM8350_POWER=m
 CONFIG_BATTERY_OLPC=y
 CONFIG_BATTERY_BQ27x00=m
 CONFIG_BATTERY_MAX17040=m
-CONFIG_HWMON=m
+CONFIG_HWMON=y
 CONFIG_HWMON_VID=m
 # CONFIG_HWMON_DEBUG_CHIP is not set
 
@@ -2528,7 +2552,6 @@ CONFIG_SENSORS_G760A=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_PKGTEMP=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
 CONFIG_SENSORS_IT87=m
@@ -2583,6 +2606,7 @@ CONFIG_SENSORS_APPLESMC=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_SENSORS_LIS3LV02D=m
 CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
 CONFIG_WATCHDOG=y
 # CONFIG_WATCHDOG_NOWAYOUT is not set
 
@@ -2599,7 +2623,7 @@ CONFIG_ALIM7101_WDT=m
 # CONFIG_SC520_WDT is not set
 CONFIG_SBC_FITPC2_WATCHDOG=m
 # CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
+CONFIG_IB700_WDT=m
 CONFIG_IBMASR=m
 # CONFIG_WAFER_WDT is not set
 CONFIG_I6300ESB_WDT=m
@@ -3091,7 +3115,6 @@ CONFIG_DRM_R128=m
 CONFIG_DRM_RADEON=m
 CONFIG_DRM_RADEON_KMS=y
 # CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_MGA=m
@@ -3348,6 +3371,7 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1968=m
 # CONFIG_SND_FM801 is not set
 CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_PREALLOC_SIZE=512
 CONFIG_SND_HDA_HWDEP=y
 # CONFIG_SND_HDA_RECONFIG is not set
 CONFIG_SND_HDA_INPUT_BEEP=y
@@ -3355,6 +3379,7 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=2
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
 CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y
 CONFIG_SND_HDA_CODEC_ANALOG=y
 CONFIG_SND_HDA_CODEC_SIGMATEL=y
 CONFIG_SND_HDA_CODEC_VIA=y
@@ -3362,6 +3387,7 @@ CONFIG_SND_HDA_CODEC_HDMI=y
 CONFIG_SND_HDA_CODEC_CIRRUS=y
 CONFIG_SND_HDA_CODEC_CONEXANT=y
 CONFIG_SND_HDA_CODEC_CA0110=y
+CONFIG_SND_HDA_CODEC_CA0132=y
 CONFIG_SND_HDA_CODEC_CMEDIA=y
 CONFIG_SND_HDA_CODEC_SI3054=y
 CONFIG_SND_HDA_GENERIC=y
@@ -3672,6 +3698,7 @@ CONFIG_MSPRO_BLOCK=m
 #
 CONFIG_MEMSTICK_TIFM_MS=m
 CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_MEMSTICK_R592=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 
@@ -3727,6 +3754,7 @@ CONFIG_EDAC=y
 #
 # CONFIG_EDAC_DEBUG is not set
 CONFIG_EDAC_DECODE_MCE=m
+# CONFIG_EDAC_MCE_INJ is not set
 CONFIG_EDAC_MM_EDAC=m
 CONFIG_EDAC_MCE=y
 CONFIG_EDAC_AMD76X=m
@@ -3744,6 +3772,7 @@ CONFIG_EDAC_R82600=m
 CONFIG_EDAC_I5000=m
 CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
+# CONFIG_EDAC_SBRIDGE is not set
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_HCTOSYS=y
@@ -3913,6 +3942,7 @@ CONFIG_ZRAM=m
 CONFIG_ZRAM_DEBUG=y
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
+# CONFIG_ACERHDF is not set
 CONFIG_ASUS_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_FUJITSU_LAPTOP=m
@@ -3937,6 +3967,7 @@ CONFIG_ACPI_WMI=m
 CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_INTEL_IPS=m
+CONFIG_MXM_WMI=m
 
 #
 # Firmware Drivers
@@ -4087,6 +4118,7 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_PSTORE=y
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
 # CONFIG_EXOFS_FS is not set
@@ -4127,7 +4159,7 @@ CONFIG_CIFS_POSIX=y
 # CONFIG_CIFS_DEBUG2 is not set
 CONFIG_CIFS_DFS_UPCALL=y
 # CONFIG_CIFS_FSCACHE is not set
-CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_CIFS_ACL=y
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
@@ -4262,7 +4294,7 @@ CONFIG_BOOT_PRINTK_DELAY=y
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 # CONFIG_LKDTM is not set
 # CONFIG_FAULT_INJECTION is not set
 # CONFIG_LATENCYTOP is not set
index 331961f..68ab2df 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.32
-# Sun Jul  5 23:04:00 2011
+# Tue Dec 20 15:42:19 2011
 #
 CONFIG_64BIT=y
 # CONFIG_X86_32 is not set
@@ -101,6 +101,7 @@ CONFIG_LOG_BUF_SHIFT=19
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 CONFIG_GROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
 CONFIG_RT_GROUP_SCHED=y
 # CONFIG_USER_SCHED is not set
 CONFIG_CGROUP_SCHED=y
@@ -117,6 +118,7 @@ CONFIG_CGROUP_MEM_RES_CTLR=y
 CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
 CONFIG_BLK_CGROUP=y
 # CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_CGROUP_PERF=y
 CONFIG_SCHED_AUTOGROUP=y
 CONFIG_MM_OWNER=y
 # CONFIG_SYSFS_DEPRECATED_V2 is not set
@@ -212,6 +214,7 @@ CONFIG_MODULE_VERIFY=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
 CONFIG_BLOCK_COMPAT=y
@@ -251,7 +254,7 @@ CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
 CONFIG_SCHED_OMIT_FRAME_POINTER=y
 CONFIG_PARAVIRT_GUEST=y
 CONFIG_XEN=y
-CONFIG_XEN_MAX_DOMAIN_MEMORY=32
+CONFIG_XEN_MAX_DOMAIN_MEMORY=128
 CONFIG_XEN_SAVE_RESTORE=y
 CONFIG_XEN_DEBUG_FS=y
 CONFIG_KVM_CLOCK=y
@@ -341,7 +344,7 @@ CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
 CONFIG_DIRECT_GBPAGES=y
 CONFIG_TRACK_DIRTY_PAGES=y
 CONFIG_NUMA=y
-CONFIG_K8_NUMA=y
+CONFIG_AMD_NUMA=y
 CONFIG_X86_64_ACPI_NUMA=y
 CONFIG_NODES_SPAN_OTHER_NODES=y
 # CONFIG_NUMA_EMU is not set
@@ -452,9 +455,10 @@ CONFIG_ACPI_CONTAINER=y
 CONFIG_ACPI_HOTPLUG_MEMORY=y
 CONFIG_ACPI_HOTPLUG_MEMORY_AUTO_ONLINE=y
 CONFIG_ACPI_SBS=m
-CONFIG_ACPI_HED=m
+CONFIG_ACPI_HED=y
 CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=m
+CONFIG_ACPI_APEI_GHES=y
+CONFIG_ACPI_APEI_PCIEAER=y
 CONFIG_ACPI_APEI_EINJ=m
 CONFIG_ACPI_APEI_ERST_DEBUG=m
 CONFIG_SFI=y
@@ -529,7 +533,7 @@ CONFIG_PCI_STUB=y
 CONFIG_HT_IRQ=y
 CONFIG_PCI_IOV=y
 CONFIG_ISA_DMA_API=y
-CONFIG_K8_NB=y
+CONFIG_AMD_NB=y
 CONFIG_PCCARD=y
 # CONFIG_PCMCIA_DEBUG is not set
 CONFIG_PCMCIA=y
@@ -711,6 +715,7 @@ CONFIG_NETFILTER_XT_TARGET_TRACE=m
 CONFIG_NETFILTER_XT_TARGET_SECMARK=m
 CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
 CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+CONFIG_NETFILTER_XT_SET=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -747,6 +752,18 @@ CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
 CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 CONFIG_NETFILTER_XT_MATCH_OSF=m
+CONFIG_IP_SET=m
+CONFIG_IP_SET_MAX=256
+CONFIG_IP_SET_BITMAP_IP=m
+CONFIG_IP_SET_BITMAP_IPMAC=m
+CONFIG_IP_SET_BITMAP_PORT=m
+CONFIG_IP_SET_HASH_IP=m
+CONFIG_IP_SET_HASH_IPPORT=m
+CONFIG_IP_SET_HASH_IPPORTIP=m
+CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETPORT=m
+CONFIG_IP_SET_LIST_SET=m
 CONFIG_IP_VS=m
 CONFIG_IP_VS_IPV6=y
 # CONFIG_IP_VS_DEBUG is not set
@@ -1393,9 +1410,6 @@ CONFIG_FCOE_FNIC=m
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
 # CONFIG_SCSI_GDTH is not set
 CONFIG_SCSI_ISCI=m
-# CONFIG_PBG_HBA_BETA is not set
-CONFIG_PBG_HBA_A2=y
-# CONFIG_PBG_HBA_A0 is not set
 CONFIG_SCSI_IPS=m
 CONFIG_SCSI_INITIO=m
 # CONFIG_SCSI_INIA100 is not set
@@ -1516,6 +1530,7 @@ CONFIG_DM_DEBUG=y
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=m
 CONFIG_DM_MIRROR=m
+CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
 CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
@@ -1525,11 +1540,19 @@ CONFIG_DM_DELAY=m
 CONFIG_DM_REPLICATOR=m
 CONFIG_DM_RAID45=m
 CONFIG_DM_UEVENT=y
+CONFIG_DM_FLAKEY=m
+CONFIG_TARGET_CORE=m
+CONFIG_TCM_IBLOCK=m
+CONFIG_TCM_FILEIO=m
+CONFIG_TCM_PSCSI=m
+CONFIG_LOOPBACK_TARGET=m
+# CONFIG_LOOPBACK_TARGET_CDB_DEBUG is not set
+CONFIG_TCM_FC=m
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
 CONFIG_FUSION_FC=m
 CONFIG_FUSION_SAS=m
-CONFIG_FUSION_MAX_SGE=128
+CONFIG_FUSION_MAX_SGE=256
 CONFIG_FUSION_CTL=m
 CONFIG_FUSION_LAN=m
 CONFIG_FUSION_LOGGING=y
@@ -2239,7 +2262,8 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
 # CONFIG_LEGACY_PTYS is not set
 CONFIG_CRASH=y
-# CONFIG_PRINTER is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
 CONFIG_PPDEV=m
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_IRQ=y
@@ -2275,7 +2299,7 @@ CONFIG_MAX_RAW_DEVS=8192
 CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
 CONFIG_HANGCHECK_TIMER=m
-# CONFIG_UV_MMTIMER is not set
+CONFIG_UV_MMTIMER=m
 CONFIG_TCG_TPM=y
 CONFIG_TCG_TIS=y
 CONFIG_TCG_NSC=m
@@ -2373,7 +2397,7 @@ CONFIG_WM8350_POWER=m
 # CONFIG_BATTERY_DS2782 is not set
 CONFIG_BATTERY_BQ27x00=m
 CONFIG_BATTERY_MAX17040=m
-CONFIG_HWMON=m
+CONFIG_HWMON=y
 CONFIG_HWMON_VID=m
 # CONFIG_HWMON_DEBUG_CHIP is not set
 
@@ -2408,7 +2432,6 @@ CONFIG_SENSORS_G760A=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_PKGTEMP=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
 CONFIG_SENSORS_IT87=m
@@ -2463,6 +2486,7 @@ CONFIG_SENSORS_APPLESMC=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_SENSORS_LIS3LV02D=m
 CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
 CONFIG_WATCHDOG=y
 # CONFIG_WATCHDOG_NOWAYOUT is not set
 
@@ -2479,7 +2503,7 @@ CONFIG_ALIM7101_WDT=m
 # CONFIG_SC520_WDT is not set
 CONFIG_SBC_FITPC2_WATCHDOG=m
 # CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
+CONFIG_IB700_WDT=m
 CONFIG_IBMASR=m
 # CONFIG_WAFER_WDT is not set
 CONFIG_I6300ESB_WDT=m
@@ -2955,7 +2979,6 @@ CONFIG_DRM_R128=m
 CONFIG_DRM_RADEON=m
 CONFIG_DRM_RADEON_KMS=y
 # CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_MGA=m
@@ -3173,6 +3196,7 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1968=m
 # CONFIG_SND_FM801 is not set
 CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_PREALLOC_SIZE=512
 CONFIG_SND_HDA_HWDEP=y
 # CONFIG_SND_HDA_RECONFIG is not set
 CONFIG_SND_HDA_INPUT_BEEP=y
@@ -3180,6 +3204,7 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=2
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
 CONFIG_SND_HDA_CODEC_REALTEK=y
+CONFIG_SND_HDA_ENABLE_REALTEK_QUIRKS=y
 CONFIG_SND_HDA_CODEC_ANALOG=y
 CONFIG_SND_HDA_CODEC_SIGMATEL=y
 CONFIG_SND_HDA_CODEC_VIA=y
@@ -3187,6 +3212,7 @@ CONFIG_SND_HDA_CODEC_HDMI=y
 CONFIG_SND_HDA_CODEC_CIRRUS=y
 CONFIG_SND_HDA_CODEC_CONEXANT=y
 CONFIG_SND_HDA_CODEC_CA0110=y
+CONFIG_SND_HDA_CODEC_CA0132=y
 CONFIG_SND_HDA_CODEC_CMEDIA=y
 CONFIG_SND_HDA_CODEC_SI3054=y
 CONFIG_SND_HDA_GENERIC=y
@@ -3496,6 +3522,7 @@ CONFIG_MSPRO_BLOCK=m
 #
 CONFIG_MEMSTICK_TIFM_MS=m
 CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_MEMSTICK_R592=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 
@@ -3553,6 +3580,7 @@ CONFIG_EDAC=y
 #
 # CONFIG_EDAC_DEBUG is not set
 CONFIG_EDAC_DECODE_MCE=m
+# CONFIG_EDAC_MCE_INJ is not set
 CONFIG_EDAC_MM_EDAC=m
 CONFIG_EDAC_MCE=y
 CONFIG_EDAC_AMD64=m
@@ -3567,6 +3595,7 @@ CONFIG_EDAC_I7CORE=m
 CONFIG_EDAC_I5000=m
 CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
+CONFIG_EDAC_SBRIDGE=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_HCTOSYS=y
@@ -3736,6 +3765,7 @@ CONFIG_ZRAM=m
 CONFIG_ZRAM_DEBUG=y
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
+# CONFIG_ACERHDF is not set
 CONFIG_ASUS_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_FUJITSU_LAPTOP=m
@@ -3759,6 +3789,7 @@ CONFIG_ACPI_WMI=m
 CONFIG_TOPSTAR_LAPTOP=m
 CONFIG_ACPI_TOSHIBA=m
 CONFIG_INTEL_IPS=m
+CONFIG_MXM_WMI=m
 
 #
 # Firmware Drivers
@@ -3913,6 +3944,7 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_PSTORE=y
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
 # CONFIG_EXOFS_FS is not set
@@ -3953,7 +3985,7 @@ CONFIG_CIFS_POSIX=y
 # CONFIG_CIFS_DEBUG2 is not set
 CONFIG_CIFS_DFS_UPCALL=y
 # CONFIG_CIFS_FSCACHE is not set
-CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_CIFS_ACL=y
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
@@ -4087,7 +4119,7 @@ CONFIG_BOOT_PRINTK_DELAY=y
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 # CONFIG_LKDTM is not set
 # CONFIG_FAULT_INJECTION is not set
 # CONFIG_LATENCYTOP is not set
index 71e6359..f6e7129 100644 (file)
@@ -30,7 +30,7 @@ Index: linux-2.6.32-131.0.15.el6.x86_64/block/blk-core.c
  /*
   * Check whether this bio extends beyond the end of the device.
   */
-@@ -1517,6 +1519,23 @@ static inline void __generic_make_reques
+@@ -1517,6 +1519,21 @@ static inline void __generic_make_reques
                if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
                        goto end_io;
  
@@ -45,10 +45,8 @@ Index: linux-2.6.32-131.0.15.el6.x86_64/block/blk-core.c
 +                              bdev->bd_dev, bio->bi_flags, bio->bi_vcnt,
 +                              bio->bi_idx, bio->bi_size,
 +                              atomic_read(&bio->bi_cnt), bio->bi_private);
-+                       set_bit(BIO_RDONLY, &bio->bi_flags);
-+                       bio_endio(bio, 0);
-+                       clear_bit(BIO_RDONLY, &bio->bi_flags);
-+                       break;
++                       err = 0;
++                       goto end_io;
 +               }
 +
                if (should_fail_request(bio))
@@ -166,18 +164,6 @@ Index: linux-2.6.32-131.0.15.el6.x86_64/fs/block_dev.c
        }
        unlock_kernel();
        mutex_unlock(&bdev->bd_mutex);
-Index: linux-2.6.32-131.0.15.el6.x86_64/include/linux/blk_types.h
-===================================================================
---- linux-2.6.32-131.0.15.el6.x86_64.orig/include/linux/blk_types.h    2011-05-10 21:37:58.000000000 +0300
-+++ linux-2.6.32-131.0.15.el6.x86_64/include/linux/blk_types.h 2011-05-19 21:03:42.000000000 +0300
-@@ -24,6 +24,7 @@
- #define BIO_NULL_MAPPED 9     /* contains invalid user pages */
- #define BIO_FS_INTEGRITY 10   /* fs owns integrity data, not block layer */
- #define BIO_QUIET     11      /* Make BIO Quiet */
-+#define BIO_RDONLY    31      /* device is readonly */
- #define bio_flagged(bio, flag)        ((bio)->bi_flags & (1 << (flag)))
- /*
 Index: linux-2.6.32-131.0.15.el6.x86_64/include/linux/fs.h
 ===================================================================
 --- linux-2.6.32-131.0.15.el6.x86_64.orig/include/linux/fs.h   2011-05-10 21:38:29.000000000 +0300
index 5cd4f1b..819c57b 100644 (file)
@@ -21,10 +21,10 @@ Index: linux-2.6.32-71.18.1.el6/include/linux/dcache.h
 --- linux-2.6.32-71.18.1.el6.orig/include/linux/dcache.h
 +++ linux-2.6.32-71.18.1.el6/include/linux/dcache.h
 @@ -185,6 +185,7 @@ d_iput:            no              no              no       yes
- #define DCACHE_COOKIE         0x0040  /* For use by dcookie subsystem */
- #define DCACHE_FSNOTIFY_PARENT_WATCHED        0x0080 /* Parent inode is watched by some fsnotify listener */
-+#define DCACHE_LUSTRE_INVALID 0x0100  /* Lustre invalidated */
+ #define DCACHE_MANAGE_TRANSIT 0x40000 /* manage transit from this dirent */
+ #define DCACHE_MANAGED_DENTRY \
+       (DCACHE_MOUNTED|DCACHE_NEED_AUTOMOUNT|DCACHE_MANAGE_TRANSIT)
++#define DCACHE_LUSTRE_INVALID 0x4000000  /* Lustre invalidated */
  
  extern spinlock_t dcache_lock;
  extern seqlock_t rename_lock;
index 52dcc52..e720c51 100644 (file)
@@ -6,4 +6,3 @@ dev_read_only-2.6.32-rhel6.patch
 blkdev_tunables-2.6-rhel6.patch
 export-2.6.32-vanilla.patch
 jbd2-jcberr-2.6-rhel6.patch
-fix-forever-in-do_get_write_access.patch
index 47d3e36..c8e9a1e 100644 (file)
@@ -1,5 +1,5 @@
 lnxmaj="2.6.32"
-lnxrel="131.6.1.el6"
+lnxrel="220.el6"
 
 KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
 SERIES=2.6-rhel6.series
index 79b4113..4385f67 100644 (file)
@@ -2,10 +2,10 @@ SERIES                VERSION                  COMMENT
 
 SUPPORTED KERNELS:
 2.6-rhel5             RHEL5: 2.6.18-274.12.1.el5
-2.6-rhel6             RHEL6: 2.6.32-131.6.1.el6
+2.6-rhel6             RHEL6: 2.6.32-220.el6
 
 CLIENT SUPPORT FOR UNPATCHED KERNELS:
          2.6.18-274.12.1.el5 (RHEL5)
-         2.6.32-131.6.1.el6 (RHEL6)
+         2.6.32-220.el6      (RHEL6)
          2.6.16.60-0.69.1 (SLES10)
          2.6.27.19-5      (SLES11)
index 2990edc..62ab844 100644 (file)
@@ -2649,7 +2649,7 @@ int __init ldlm_init(void)
         return 0;
 }
 
-void __exit ldlm_exit(void)
+void ldlm_exit(void)
 {
         int rc;
         if (ldlm_refcount)
index 656281c..87f9207 100644 (file)
@@ -1325,7 +1325,7 @@ static struct vfsmount *server_kernel_mount(struct super_block *sb)
         char *options = NULL;
         unsigned long page, s_flags;
         struct page *__page;
-        int rc;
+        int len, rc;
         ENTRY;
 
         OBD_ALLOC(ldd, sizeof(*ldd));
@@ -1380,11 +1380,15 @@ static struct vfsmount *server_kernel_mount(struct super_block *sb)
         memset(options, 0, CFS_PAGE_SIZE);
         strncpy(options, ldd->ldd_mount_opts, CFS_PAGE_SIZE - 2);
 
+        len = CFS_PAGE_SIZE - strlen(options) - 2;
+        if (*options != 0)
+                strcat(options, ",");
+        strncat(options, "no_mbcache", len);
+
         /* Add in any mount-line options */
         if (lmd->lmd_opts && (*(lmd->lmd_opts) != 0)) {
-                int len = CFS_PAGE_SIZE - strlen(options) - 2;
-                if (*options != 0)
-                        strcat(options, ",");
+                len = CFS_PAGE_SIZE - strlen(options) - 2;
+                strcat(options, ",");
                 strncat(options, lmd->lmd_opts, len);
         }
 
index 57bf5ba..08fec8f 100644 (file)
@@ -138,7 +138,7 @@ void sptlrpc_conf_fini(void);
 
 /* sec.c */
 int  __init sptlrpc_init(void);
-void __exit sptlrpc_fini(void);
+void sptlrpc_fini(void);
 
 /* recov_thread.c */
 int llog_recov_init(void);
index 1531475..f0a38d8 100644 (file)
@@ -2544,7 +2544,7 @@ out:
         return rc;
 }
 
-void __exit sptlrpc_fini(void)
+void sptlrpc_fini(void)
 {
         sptlrpc_lproc_fini();
         sptlrpc_plain_fini();