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>
# 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 || \
' \
-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: 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);
}
/* 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;
}
/*
* 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);
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.
*/
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;
}
/*
* 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: 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"},
{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;
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: 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
*/
#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;
"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
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;
}
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;
}
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;
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) {
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);
}
unlock_buffer(bs->bh);
if (error == -EIO)
-@@ -801,7 +806,8 @@
+@@ -801,7 +806,8 @@ inserted:
if (error)
goto cleanup_dquot;
}
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);
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
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;
+{
+ 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,
+ 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);
+}
+
+ 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)
+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);
===================================================================
--- 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;
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();
out3:
+ exit_ext4_mballoc();
+out4:
+ ext4_exit_feat_adverts();
remove_proc_entry("fs/ext4", NULL);
kset_unregister(ext4_kset);
-out4:
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: 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 */
#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) \
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
*/
#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)
{
#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;
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;
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");
+ 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
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;
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: 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"},
{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;
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: 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);
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);
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),
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: 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
#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;
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
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) {
+ 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);
}
/* 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 */
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;
}
}
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;
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)
"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;
}
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
}
/*
/* 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);
}
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);
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);
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);
ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
/*
-@@ -3802,6 +3870,8 @@
+@@ -3789,6 +3857,8 @@ repeat:
spin_unlock(&pa->pa_lock);
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);
}
bitmap_bh = ext4_read_block_bitmap(sb, group);
-@@ -3954,6 +4024,8 @@
+@@ -3941,6 +4011,8 @@ repeat:
}
ext4_lock_group(sb, group);
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);
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: 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
/*
* 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 *);
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_
/*
* 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)
#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);
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;
+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)
* 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;
}
+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);
}
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);
}
/*
* 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;
}
+
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);
}
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,
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"},
{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;
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;
===================================================================
--- 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 */
__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| \
#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
* 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)));
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);
+#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);
}
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));
/*
* 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);
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;
#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;
+ }
}
}
- ext4_setup_system_zone(sb);
+
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;
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)
+ }
+}
+
-+
- 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,
};
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;
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);
}
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);
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)
{
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);
/* 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);
/* 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);
* 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);
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),
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;
+
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,
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;
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;
===================================================================
--- 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
#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| \
#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
/*
* 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)
#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,
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);
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,
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);
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;
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;
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
-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]
#
# 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"
])
#
#
# 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
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
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
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
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
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
# 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
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
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
# 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
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
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
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
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
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
CONFIG_SENSORS_ATK0110=m
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# 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
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
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
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
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
#
CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_MEMSTICK_R592=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=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
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
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
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_INTEL_IPS=m
+CONFIG_MXM_WMI=m
#
# Firmware Drivers
# 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
# 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
# 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
#
# 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
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
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
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
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
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
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
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
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
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
# 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
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
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
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
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
# 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
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
CONFIG_SENSORS_ATK0110=m
CONFIG_SENSORS_LIS3LV02D=m
CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# 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
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
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
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
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
#
CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MEMSTICK_JMICRON_38X=m
+CONFIG_MEMSTICK_R592=m
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=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
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
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
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_INTEL_IPS=m
+CONFIG_MXM_WMI=m
#
# Firmware Drivers
# 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
# 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
# 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
/*
* 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;
+ 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))
}
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
--- 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;
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
lnxmaj="2.6.32"
-lnxrel="131.6.1.el6"
+lnxrel="220.el6"
KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
SERIES=2.6-rhel6.series
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)
return 0;
}
-void __exit ldlm_exit(void)
+void ldlm_exit(void)
{
int rc;
if (ldlm_refcount)
char *options = NULL;
unsigned long page, s_flags;
struct page *__page;
- int rc;
+ int len, rc;
ENTRY;
OBD_ALLOC(ldd, sizeof(*ldd));
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);
}
/* sec.c */
int __init sptlrpc_init(void);
-void __exit sptlrpc_fini(void);
+void sptlrpc_fini(void);
/* recov_thread.c */
int llog_recov_init(void);
return rc;
}
-void __exit sptlrpc_fini(void)
+void sptlrpc_fini(void)
{
sptlrpc_lproc_fini();
sptlrpc_plain_fini();