SER=
AS_IF([test x$RHEL_KERNEL = xyes], [
+ AS_VERSION_COMPARE([$RHEL_KERNEL_VERSION],[2.6.32-431],[
AS_VERSION_COMPARE([$RHEL_KERNEL_VERSION],[2.6.32-343],[
AS_VERSION_COMPARE([$RHEL_KERNEL_VERSION],[2.6.32],[],
[SER="2.6-rhel6.series"],[SER="2.6-rhel6.series"])],
- [SER="2.6-rhel6.4.series"],[SER="2.6-rhel6.4.series"])
+ [SER="2.6-rhel6.4.series"],[SER="2.6-rhel6.4.series"])],
+ [SER="2.6-rhel6.5.series"],[SER="2.6-rhel6.5.series"])
], [test x$SUSE_KERNEL = xyes], [
AS_VERSION_COMPARE([$LINUXRELEASE],[3.0.0],[
AS_VERSION_COMPARE([$LINUXRELEASE],[2.6.32],[],
--- /dev/null
+Restore ext4_ext_walk_space().
+Copy from rhel6.4 [2.6.32-358.23.2.el6] kernel.
+
+Index: linux-2.6.32-431.3.1.el6.x86_64/fs/ext4/extents.c
+===================================================================
+--- linux-2.6.32-431.3.1.el6.x86_64.orig/fs/ext4/extents.c
++++ linux-2.6.32-431.3.1.el6.x86_64/fs/ext4/extents.c
+@@ -4487,6 +4487,121 @@ static int ext4_xattr_fiemap(struct inod
+ return (error < 0 ? error : 0);
+ }
+
++int ext4_ext_walk_space(struct inode *inode, ext4_lblk_t block,
++ ext4_lblk_t num, ext_prepare_callback func,
++ void *cbdata)
++{
++ struct ext4_ext_path *path = NULL;
++ struct ext4_ext_cache cbex;
++ struct ext4_extent *ex;
++ ext4_lblk_t next, start = 0, end = 0;
++ ext4_lblk_t last = block + num;
++ int depth, exists, err = 0;
++
++ BUG_ON(func == NULL);
++ BUG_ON(inode == NULL);
++
++ while (block < last && block != EXT_MAX_BLOCKS) {
++ num = last - block;
++ /* find extent for this block */
++ down_read(&EXT4_I(inode)->i_data_sem);
++ path = ext4_ext_find_extent(inode, block, path);
++ up_read(&EXT4_I(inode)->i_data_sem);
++ if (IS_ERR(path)) {
++ err = PTR_ERR(path);
++ path = NULL;
++ break;
++ }
++
++ depth = ext_depth(inode);
++ if (unlikely(path[depth].p_hdr == NULL)) {
++ EXT4_ERROR_INODE(inode, "path[%d].p_hdr == NULL", depth);
++ err = -EIO;
++ break;
++ }
++ ex = path[depth].p_ext;
++ next = ext4_ext_next_allocated_block(path);
++
++ exists = 0;
++ if (!ex) {
++ /* there is no extent yet, so try to allocate
++ * all requested space */
++ start = block;
++ end = block + num;
++ } else if (le32_to_cpu(ex->ee_block) > block) {
++ /* need to allocate space before found extent */
++ start = block;
++ end = le32_to_cpu(ex->ee_block);
++ if (block + num < end)
++ end = block + num;
++ } else if (block >= le32_to_cpu(ex->ee_block)
++ + ext4_ext_get_actual_len(ex)) {
++ /* need to allocate space after found extent */
++ start = block;
++ end = block + num;
++ if (end >= next)
++ end = next;
++ } else if (block >= le32_to_cpu(ex->ee_block)) {
++ /*
++ * some part of requested space is covered
++ * by found extent
++ */
++ start = block;
++ end = le32_to_cpu(ex->ee_block)
++ + ext4_ext_get_actual_len(ex);
++ if (block + num < end)
++ end = block + num;
++ exists = 1;
++ } else {
++ BUG();
++ }
++ BUG_ON(end <= start);
++
++ if (!exists) {
++ cbex.ec_block = start;
++ cbex.ec_len = end - start;
++ cbex.ec_start = 0;
++ } else {
++ cbex.ec_block = le32_to_cpu(ex->ee_block);
++ cbex.ec_len = ext4_ext_get_actual_len(ex);
++ cbex.ec_start = ext4_ext_pblock(ex);
++ }
++
++ if (unlikely(cbex.ec_len == 0)) {
++ EXT4_ERROR_INODE(inode, "cbex.ec_len == 0");
++ err = -EIO;
++ break;
++ }
++ err = func(inode, path, &cbex, ex, cbdata);
++ ext4_ext_drop_refs(path);
++
++ if (err < 0)
++ break;
++
++ if (err == EXT_REPEAT)
++ continue;
++ else if (err == EXT_BREAK) {
++ err = 0;
++ break;
++ }
++
++ if (ext_depth(inode) != depth) {
++ /* depth was changed. we have to realloc path */
++ kfree(path);
++ path = NULL;
++ }
++
++ block = cbex.ec_block + cbex.ec_len;
++ }
++
++ if (path) {
++ ext4_ext_drop_refs(path);
++ kfree(path);
++ }
++
++ return err;
++}
++
+ /*
+ * ext4_ext_punch_hole
+ *
+Index: linux-2.6.32-431.3.1.el6.x86_64/fs/ext4/ext4_extents.h
+===================================================================
+--- linux-2.6.32-431.3.1.el6.x86_64.orig/fs/ext4/ext4_extents.h
++++ linux-2.6.32-431.3.1.el6.x86_64/fs/ext4/ext4_extents.h
+@@ -120,6 +120,19 @@ struct ext4_ext_path {
+ struct ext4_extent_header *p_hdr;
+ struct buffer_head *p_bh;
+ };
++/*
++ * to be called by ext4_ext_walk_space()
++ * negative retcode - error
++ * positive retcode - signal for ext4_ext_walk_space(), see below
++ * callback must return valid extent (passed or newly created)
++ */
++typedef int (*ext_prepare_callback)(struct inode *, struct ext4_ext_path *,
++ struct ext4_ext_cache *,
++ struct ext4_extent *, void *);
++
++#define EXT_CONTINUE 0
++#define EXT_BREAK 1
++#define EXT_REPEAT 2
+
+ /*
+ * structure for external API
+@@ -272,6 +285,9 @@ static inline void ext4_idx_store_pblock
+ ix->ei_leaf_hi = cpu_to_le16((unsigned long) ((pb >> 31) >> 1) &
+ 0xffff);
+ }
++extern int ext4_ext_walk_space(struct inode *, ext4_lblk_t,
++ ext4_lblk_t, ext_prepare_callback,
++ void *);
+
+ extern int ext4_ext_calc_metadata_amount(struct inode *inode,
+ sector_t lblocks);
--- /dev/null
+From: Aditya Kali <adityakali@google.com>
+
+This patch is an attempt towards supporting quotas as first class
+feature in ext4. It is based on the proposal at:
+https://ext4.wiki.kernel.org/index.php/Design_For_1st_Class_Quota_in_Ext4
+This patch introduces a new feature - EXT4_FEATURE_RO_COMPAT_QUOTA which, when
+turned on, enables quota accounting at mount time iteself. Also, the
+quota inodes are stored in two additional superblock fields.
+Some changes introduced by this patch that should be pointed out are:
+1) Two new ext4-superblock fields - s_usr_quota_inum and s_grp_quota_inum
+ for storing the quota inodes in use.
+2) If the QUOTA feature and corresponding quota inodes are set in superblock,
+ Quotas are turned on at mount time irrespective of the quota mount options.
+ Thus the mount options 'quota', 'usrquota' and 'grpquota' are completely
+ ignored with the new QUOTA feature flag.
+3) Default quota inodes are: inode#3 for tracking userquota and inode#4 for
+ tracking group quota. The superblock fields can be set to use other inodes
+ as well.
+4) mke2fs or tune2fs will initialize these inodes when quota feature is
+ being set. The default reserved inodes will not be visible to user as
+ regular files.
+5) Once quotas are turned on, they cannot be turned off while the FS is
+ mounted. This is because we do not want to let the quota get inconsistent.
+6) With the QUOTA feature set, since the quota inodes are hidden, some of the
+ utilities from quota-tools will no longer work correctly. Instead, e2fsprogs
+ will include support for fixing the quota files.
+7) Support is only for the new V2 quota file format.
+
+Signed-off-by: Aditya Kali <adityakali@google.com>
+---
+Index: linux-stage/fs/ext4/ext4.h
+===================================================================
+--- linux-stage.orig/fs/ext4/ext4.h 2012-06-26 11:26:23.345235745 +0200
++++ linux-stage/fs/ext4/ext4.h 2012-06-26 11:37:38.250355000 +0200
+@@ -162,6 +162,8 @@ typedef struct ext4_io_end {
+ */
+ #define EXT4_BAD_INO 1 /* Bad blocks inode */
+ #define EXT4_ROOT_INO 2 /* Root inode */
++#define EXT4_USR_QUOTA_INO 3 /* User quota inode */
++#define EXT4_GRP_QUOTA_INO 4 /* Group quota inode */
+ #define EXT4_BOOT_LOADER_INO 5 /* Boot loader inode */
+ #define EXT4_UNDEL_DIR_INO 6 /* Undelete directory inode */
+ #define EXT4_RESIZE_INO 7 /* Reserved group descriptors inode */
+@@ -1016,7 +1018,9 @@ struct ext4_super_block {
+ __u8 s_last_error_func[32]; /* function where the error happened */
+ #define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts)
+ __u8 s_mount_opts[64];
+- __le32 s_reserved[112]; /* Padding to the end of the block */
++ __le32 s_usr_quota_inum; /* inode for tracking user quota */
++ __le32 s_grp_quota_inum; /* inode for tracking group quota */
++ __le32 s_reserved[110]; /* Padding to the end of the block */
+ };
+
+ #ifdef __KERNEL__
+@@ -1090,6 +1094,7 @@ struct ext4_sb_info {
+ #ifdef CONFIG_QUOTA
+ char *s_qf_names[MAXQUOTAS]; /* Names of quota files with journalled quota */
+ int s_jquota_fmt; /* Format of quota to use */
++ unsigned long s_qf_inums[MAXQUOTAS]; /* Quota file inodes */
+ #endif
+ unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */
+ struct rb_root system_blks;
+@@ -1189,6 +1194,8 @@ static inline struct timespec ext4_curre
+ static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)
+ {
+ return ino == EXT4_ROOT_INO ||
++ ino == EXT4_USR_QUOTA_INO ||
++ ino == EXT4_GRP_QUOTA_INO ||
+ ino == EXT4_JOURNAL_INO ||
+ ino == EXT4_RESIZE_INO ||
+ (ino >= EXT4_FIRST_INO(sb) &&
+@@ -1293,6 +1300,7 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+ #define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
+ #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
+ #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
++#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
+
+ #define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001
+ #define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002
+@@ -1325,7 +1333,8 @@ EXT4_INODE_BIT_FNS(state, state_flags)
+ EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
+ EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \
+ EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
+- EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
++ EXT4_FEATURE_RO_COMPAT_HUGE_FILE| \
++ EXT4_FEATURE_RO_COMPAT_QUOTA)
+
+ /*
+ * Default values for user and/or group using reserved blocks
+Index: linux-stage/fs/ext4/ext4_jbd2.h
+===================================================================
+--- linux-stage.orig/fs/ext4/ext4_jbd2.h 2012-06-26 11:35:31.025105000 +0200
++++ linux-stage/fs/ext4/ext4_jbd2.h 2012-06-26 11:37:38.250631000 +0200
+@@ -89,14 +89,20 @@
+ #ifdef CONFIG_QUOTA
+ /* Amount of blocks needed for quota update - we know that the structure was
+ * allocated so we need to update only data block */
+-#define EXT4_QUOTA_TRANS_BLOCKS(sb) (test_opt(sb, QUOTA) ? 1 : 0)
++#define EXT4_QUOTA_TRANS_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\
++ EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) ?\
++ 1 : 0)
+ /* Amount of blocks needed for quota insert/delete - we do some block writes
+ * but inode, sb and group updates are done only once */
+-#define EXT4_QUOTA_INIT_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_INIT_ALLOC*\
+- (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_INIT_REWRITE) : 0)
++#define EXT4_QUOTA_INIT_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\
++ EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) ?\
++ (DQUOT_INIT_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\
++ +3+DQUOT_INIT_REWRITE) : 0)
+
+-#define EXT4_QUOTA_DEL_BLOCKS(sb) (test_opt(sb, QUOTA) ? (DQUOT_DEL_ALLOC*\
+- (EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)+3+DQUOT_DEL_REWRITE) : 0)
++#define EXT4_QUOTA_DEL_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\
++ EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) ?\
++ (DQUOT_DEL_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\
++ +3+DQUOT_DEL_REWRITE) : 0)
+ #else
+ #define EXT4_QUOTA_TRANS_BLOCKS(sb) 0
+ #define EXT4_QUOTA_INIT_BLOCKS(sb) 0
+Index: linux-stage/fs/ext4/super.c
+===================================================================
+--- linux-stage.orig/fs/ext4/super.c 2012-06-26 11:37:30.905374000 +0200
++++ linux-stage/fs/ext4/super.c 2012-06-26 11:38:30.997488000 +0200
+@@ -86,6 +86,11 @@ wait_queue_head_t aio_wq[WQ_HASH_SZ];
+
+ static int bigendian_extents;
+
++#ifdef CONFIG_QUOTA
++static int ext4_acct_on(struct super_block *sb);
++static int ext4_acct_off(struct super_block *sb);
++#endif
++
+ ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
+ struct ext4_group_desc *bg)
+ {
+@@ -670,6 +675,12 @@ static void ext4_put_super(struct super_
+
+ ext4_unregister_li_request(sb);
+
++#ifdef CONFIG_QUOTA
++ /* disable usage tracking which was enabled at mount time */
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA))
++ ext4_acct_off(sb);
++#endif
++
+ flush_workqueue(sbi->dio_unwritten_wq);
+ destroy_workqueue(sbi->dio_unwritten_wq);
+
+@@ -2142,14 +2153,22 @@ static void ext4_orphan_cleanup(struct s
+ #ifdef CONFIG_QUOTA
+ /* Needed for iput() to work correctly and not trash data */
+ sb->s_flags |= MS_ACTIVE;
+- /* Turn on quotas so that they are updated correctly */
+- for (i = 0; i < MAXQUOTAS; i++) {
+- if (EXT4_SB(sb)->s_qf_names[i]) {
+- int ret = ext4_quota_on_mount(sb, i);
+- if (ret < 0)
+- ext4_msg(sb, KERN_ERR,
+- "Cannot turn on journaled "
+- "quota: error %d", ret);
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) {
++ int ret;
++ ret = ext4_acct_on(sb);
++ if (ret)
++ ext4_msg(sb, KERN_ERR, "Failed to turn on usage "
++ "tracking for quota: error %d", ret);
++ } else {
++ /* Turn on quotas so that they are updated correctly */
++ for (i = 0; i < MAXQUOTAS; i++) {
++ if (EXT4_SB(sb)->s_qf_names[i]) {
++ int ret = ext4_quota_on_mount(sb, i);
++ if (ret < 0)
++ ext4_msg(sb, KERN_ERR,
++ "Cannot turn on journaled "
++ "quota: error %d", ret);
++ }
+ }
+ }
+ #endif
+@@ -2193,10 +2212,14 @@ static void ext4_orphan_cleanup(struct s
+ ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
+ PLURAL(nr_truncates));
+ #ifdef CONFIG_QUOTA
+- /* Turn quotas off */
+- for (i = 0; i < MAXQUOTAS; i++) {
+- if (sb_dqopt(sb)->files[i])
+- vfs_quota_off(sb, i, 0);
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) {
++ ext4_acct_off(sb);
++ } else {
++ /* Turn quotas off */
++ for (i = 0; i < MAXQUOTAS; i++) {
++ if (sb_dqopt(sb)->files[i])
++ vfs_quota_off(sb, i, 0);
++ }
+ }
+ #endif
+ sb->s_flags = s_flags; /* Restore MS_RDONLY status */
+@@ -3395,6 +3418,15 @@ static int ext4_fill_super(struct super_
+ #ifdef CONFIG_QUOTA
+ sb->s_qcop = &ext4_qctl_operations;
+ sb->dq_op = &ext4_quota_operations;
++
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) {
++ /* Use new qctl operations with quota on function that does not
++ * require user specified quota file path. */
++ sb->s_qcop = &ext4_qctl_operations;
++
++ sbi->s_qf_inums[USRQUOTA] = es->s_usr_quota_inum;
++ sbi->s_qf_inums[GRPQUOTA] = es->s_grp_quota_inum;
++ }
+ #endif
+ INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
+ mutex_init(&sbi->s_orphan_lock);
+@@ -3622,8 +3654,31 @@ no_journal:
+ } else
+ descr = "out journal";
+
+- ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. "
+- "Opts: %s%s", descr, sbi->s_es->s_mount_opts,
++#ifdef CONFIG_QUOTA
++ /* Enable space tracking during mount, enforcement can be enabled/disable
++ * later with quota_on/off */
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA) &&
++ !(sb->s_flags & MS_RDONLY)) {
++ ret = ext4_acct_on(sb);
++ if (ret) {
++ ext4_msg(sb, KERN_ERR, "Can't enable usage tracking on "
++ "a filesystem with the QUOTA feature set");
++ goto failed_mount4;
++ }
++ }
++#else
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA) &&
++ !(sb->s_flags & MS_RDONLY))
++ ext4_msg(sb, KERN_WARNING, "Mounting a filesystem with the "
++ "QUOTA feature set whereas the kernel does not "
++ "support quota, e2fsck will be required to fix usage "
++ "information");
++
++#endif /* CONFIG_QUOTA */
++
++ ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. quota=%s. "
++ "Opts: %s%s", descr, sb_any_quota_loaded(sb) ? "on" : "off",
++ sbi->s_es->s_mount_opts,
+ *sbi->s_es->s_mount_opts ? "; " : "");
+
+ lock_kernel();
+@@ -3981,6 +4036,12 @@ static int ext4_commit_super(struct supe
+ es->s_free_inodes_count =
+ cpu_to_le32(percpu_counter_sum_positive(
+ &EXT4_SB(sb)->s_freeinodes_counter));
++#ifdef CONFIG_QUOTA
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) {
++ es->s_usr_quota_inum = EXT4_SB(sb)->s_qf_inums[USRQUOTA];
++ es->s_grp_quota_inum = EXT4_SB(sb)->s_qf_inums[GRPQUOTA];
++ }
++#endif
+ sb->s_dirt = 0;
+ BUFFER_TRACE(sbh, "marking dirty");
+ mark_buffer_dirty(sbh);
+@@ -4531,6 +4592,22 @@ static int ext4_quota_on(struct super_bl
+ int err;
+ struct path path;
+
++ /* When QUOTA feature is set, quota on enables enforcement, accounting
++ * being already enabled at mount time */
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA)) {
++ struct inode *qf_inode;
++
++ if (!EXT4_SB(sb)->s_qf_inums[type])
++ return -EINVAL;
++ qf_inode = ext4_iget(sb, EXT4_SB(sb)->s_qf_inums[type]);
++ if (IS_ERR(qf_inode))
++ return PTR_ERR(qf_inode);
++ err = vfs_quota_enable(qf_inode, type, QFMT_VFS_V1,
++ DQUOT_LIMITS_ENABLED);
++ iput(qf_inode);
++ return err;
++ }
++
+ if (!test_opt(sb, QUOTA))
+ return -EINVAL;
+ /* When remounting, no checks are needed and in fact, name is NULL */
+@@ -4630,9 +4707,114 @@ static int ext4_quota_off(struct super_b
+ iput(inode);
+ }
+
++ /* When QUOTA feature is set, quota off just disables enforcement but
++ * leaves accounting on */
++ if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA))
++ return vfs_quota_disable(sb, type, DQUOT_LIMITS_ENABLED);
++
+ return vfs_quota_off(sb, type, remount);
+ }
+
++/*
++ * New quota_on function that is used to turn accounting on when QUOTA
++ * feature is set.
++ */
++static int ext4_acct_on(struct super_block *sb)
++{
++ struct inode *qf_inode[MAXQUOTAS];
++ int rc;
++
++ if (!EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA) ||
++ !EXT4_SB(sb)->s_qf_inums[USRQUOTA] ||
++ !EXT4_SB(sb)->s_qf_inums[GRPQUOTA])
++ return -EINVAL;
++
++ qf_inode[USRQUOTA] = ext4_iget(sb, EXT4_SB(sb)->s_qf_inums[USRQUOTA]);
++ if (IS_ERR(qf_inode[USRQUOTA])) {
++ EXT4_SB(sb)->s_qf_inums[USRQUOTA] = 0;
++ return PTR_ERR(qf_inode[USRQUOTA]);
++ }
++ qf_inode[GRPQUOTA] = ext4_iget(sb, EXT4_SB(sb)->s_qf_inums[GRPQUOTA]);
++ if (IS_ERR(qf_inode[GRPQUOTA])) {
++ iput(qf_inode[USRQUOTA]);
++ EXT4_SB(sb)->s_qf_inums[GRPQUOTA] = 0;
++ return PTR_ERR(qf_inode[GRPQUOTA]);
++ }
++
++ /*
++ * When we journal data on quota file, we have to flush journal to see
++ * all updates to the file when we bypass pagecache...
++ */
++ if (EXT4_SB(sb)->s_journal) {
++ /*
++ * We don't need to lock updates but journal_flush() could
++ * otherwise be livelocked...
++ */
++ jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
++ rc = jbd2_journal_flush(EXT4_SB(sb)->s_journal);
++ jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
++ if (rc) {
++ iput(qf_inode[USRQUOTA]);
++ iput(qf_inode[GRPQUOTA]);
++ return rc;
++ }
++ }
++
++ /* only enable quota accounting by default */
++ rc = vfs_quota_enable(qf_inode[USRQUOTA], USRQUOTA, QFMT_VFS_V1,
++ DQUOT_USAGE_ENABLED);
++ iput(qf_inode[USRQUOTA]);
++ if (rc) {
++ iput(qf_inode[GRPQUOTA]);
++ return rc;
++ }
++ rc = vfs_quota_enable(qf_inode[GRPQUOTA], GRPQUOTA, QFMT_VFS_V1,
++ DQUOT_USAGE_ENABLED);
++ iput(qf_inode[GRPQUOTA]);
++ return rc;
++}
++
++/*
++ * New quota_on function that is used to turn off accounting when QUOTA feature
++ * is set.
++ */
++static int ext4_acct_off(struct super_block *sb)
++{
++ int type, rc = 0;
++
++ if (!EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_QUOTA))
++ return -EINVAL;
++
++ for (type = 0; type < MAXQUOTAS; type++) {
++ struct inode *inode = sb_dqopt(sb)->files[type];
++ handle_t *handle;
++
++ if (!inode)
++ continue;
++ /* Update modification times of quota files when userspace can
++ * start looking at them */
++ handle = ext4_journal_start(inode, 1);
++ if (IS_ERR(handle))
++ goto out;
++
++ inode->i_mtime = inode->i_ctime = CURRENT_TIME;
++ ext4_mark_inode_dirty(handle, inode);
++ ext4_journal_stop(handle);
++ }
++
++out:
++ for (type = 0; type < MAXQUOTAS; type++) {
++ int ret;
++ ret = vfs_quota_disable(sb, type,
++ DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
++ if (!rc && ret)
++ rc = ret;
++ }
++ return rc;
++}
++
++
++
+ /* Read data from quotafile - avoid pagecache and such because we cannot afford
+ * acquiring the locks... As quota files are never truncated and quota code
+ * itself serializes the operations (and noone else should touch the files)
--- /dev/null
+rhel6.3/ext4-use-vzalloc-in-ext4_fill_flex_info.patch
+rhel6.3/ext4-introduce-ext4_kvmalloc-ext4_kzalloc-and-ext4_kvfree.patch
+rhel6.3/ext4-add-missing-kfree-on-error-return-path-in-add_new_gdb.patch
+rhel6.3/ext4-use-ext4_kvzalloc-ext4_kvmalloc-for-s_group_desc-and-s_group_info.patch
+rhel6.3/ext4-wantedi-2.6.patch
+rhel6.3/ext4-map_inode_page-2.6.18.patch
+rhel6.3/export-ext4-2.6.patch
+rhel6.3/ext4-remove-cond_resched-calls.patch
+rhel6.3/ext4-nlink-2.6.patch
+sles11sp1/ext4-ext_generation.patch
+rhel6.3/ext4-inode-version.patch
+rhel6.4/ext4-mmp.patch
+rhel6.3/ext4-lookup-dotdot.patch
+rhel6.3/ext4-print-inum-in-htree-warning.patch
+rhel6.3/ext4-xattr-no-update-ctime.patch
+rhel6.4/ext4-prealloc.patch
+rhel6.3/ext4-mballoc-extra-checks.patch
+rhel6.4/ext4-misc.patch
+rhel6.3/ext4-big-endian-check-2.6.patch
+rhel6.3/ext4-alloc-policy-2.6.patch
+rhel6.3/ext4-force_over_128tb.patch
+rhel6.3/ext4-pdir-fix.patch
+rhel6.3/ext4-add-more-error-checks-to-ext4_mkdir.patch
+rhel6.3/ext4-osd-iop-common.patch
+rhel6.3/ext4-osd-iam-exports.patch
+rhel6.3/ext4-hash-indexed-dir-dotdot-update.patch
+rhel6.3/ext4-kill-dx_root.patch
+rhel6.3/ext4-extents-mount-option.patch
+rhel6.3/ext4-fiemap-2.6.patch
+rhel6.4/ext4-mballoc-pa_free-mismatch.patch
+rhel6.3/ext4-data-in-dirent.patch
+rhel6.3/ext4-large-eas.patch
+rhel6.3/ext4-disable-mb-cache.patch
+rhel6.3/ext4-back-dquot-to.patch
+rhel6.3/ext4-nocmtime-2.6.patch
+rhel6.3/ext4-journal-callback.patch
+rhel6.5/ext4-ext-walk-space.patch
+rhel6.3/ext4-store-tree-generation-at-find.patch
+rhel6.3/ext4-pdirop.patch
+rhel6.4/ext4-extra-isize.patch
+rhel6.3/ext4-quota-force-block-alloc-quotaoff.patch
+rhel6.3/ext4-quota-dont-update-cmtime.patch
+rhel6.5/ext4-quota-first-class.patch
+rhel6.3/ext4-inode_info_reorganize.patch
+rhel6.4/ext4-fix-mbgroups-access.patch
+rhel6.3/ext4-fix-ext4_mb_add_n_trim.patch
+rhel6.3/ext4-max-dir-size.patch
+rhel6.4/ext4-max-dir-size-options.patch
+rhel6.3/ext4-not-discard-preallocation-umount.patch
+rhel6.3/ext4-journal-path-opt.patch
case $RHEL_KERNEL_VERSION in
2.6.32-358*)
EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4";;
+ 2.6.32-431*)
+ EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_5";;
esac
fi
AC_MSG_CHECKING([whether to use any OFED backport headers])
* version 2.6.0
* See http://wiki.whamcloud.com/display/PUB/Lustre+Support+Matrix
* Server support for kernels:
- 2.6.32-358.23.2.el6 (RHEL6)
+ 2.6.32-431.3.1.el6 (RHEL6)
* Client support for unpatched kernels:
- 2.6.32-358.23.2.el6 (RHEL6)
+ 2.6.32-431.3.1.el6 (RHEL6)
2.6.27.19-5 (SLES11)
2.6.18-348.3.1.el5 (RHEL5)
2.6.16.60-0.69.1 (SLES10)
-# i386
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32
-# Fri Feb 22 02:41:52 2013
+# Wed Dec 4 21:11:24 2013
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
+CONFIG_NEED_BOUNCE_POOL=y
CONFIG_VIRT_TO_BUS=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
#
# CPUFreq processor drivers
#
+CONFIG_X86_INTEL_PSTATE=m
CONFIG_X86_PCC_CPUFREQ=m
CONFIG_X86_ACPI_CPUFREQ=m
# CONFIG_X86_POWERNOW_K6 is not set
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IP_TUNNEL=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_PE_SIP=m
#
# IP: Netfilter Configuration
CONFIG_IP_SCTP=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_RDS=m
CONFIG_RDS_RDMA=m
CONFIG_RDS_TCP=m
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_RPS=y
CONFIG_NETPRIO_CGROUP=y
+CONFIG_RFS_ACCEL=y
#
# Network testing
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_CFG80211_WEXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
CONFIG_WIMAX_DEBUG_LEVEL=8
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_NVME=m
CONFIG_BLK_DEV_OSD=m
CONFIG_BLK_DEV_SX8=m
# CONFIG_BLK_DEV_UB is not set
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not set
+# CONFIG_BLK_DEV_RSXX is not set
CONFIG_MISC_DEVICES=y
CONFIG_IBM_ASM=m
# CONFIG_PHANTOM is not set
CONFIG_SCSI_MPT2SAS=m
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS_LOGGING=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_LOGGING=y
CONFIG_SCSI_HPTIOP=m
# CONFIG_SCSI_BUSLOGIC is not set
CONFIG_VMWARE_PVSCSI=m
# CONFIG_SCSI_NSP32 is not set
CONFIG_SCSI_DEBUG=m
CONFIG_SCSI_PMCRAID=m
+CONFIG_SCSI_PM8001=m
CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
-# CONFIG_MULTICORE_RAID456 is not set
# CONFIG_MD_MULTIPATH is not set
CONFIG_MD_FAULTY=m
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=m
+CONFIG_DM_BIO_PRISON=m
CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_E1000E=m
CONFIG_IP1000=m
CONFIG_IGB=m
+CONFIG_IGB_HWMON=y
CONFIG_IGB_DCA=y
-CONFIG_IGB_PTP=y
CONFIG_IGBVF=m
CONFIG_NS83820=m
# CONFIG_HAMACHI is not set
CONFIG_MLX4_DEBUG=y
CONFIG_TEHUTI=m
CONFIG_BNX2X=m
+CONFIG_BNX2X_SRIOV=y
CONFIG_QLCNIC=m
+CONFIG_QLCNIC_SRIOV=y
CONFIG_QLGE=m
CONFIG_BNA=m
CONFIG_SFC=m
CONFIG_P54_PCI=m
CONFIG_P54_LEDS=y
CONFIG_ATH_COMMON=m
+CONFIG_ATH_CARDS=m
# CONFIG_ATH_DEBUG is not set
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
CONFIG_ATH9K_PCI=y
# CONFIG_ATH9K_AHB is not set
# CONFIG_ATH9K_DEBUGFS is not set
-CONFIG_ATH9K_RATE_CONTROL=y
-# CONFIG_ATH9K_HTC is not set
-CONFIG_AR9170_USB=m
-CONFIG_AR9170_LEDS=y
+# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
+CONFIG_CARL9170=m
+CONFIG_CARL9170_LEDS=y
+CONFIG_CARL9170_WPC=y
+# CONFIG_CARL9170_HWRNG is not set
CONFIG_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m
+CONFIG_IWLDVM=m
+CONFIG_IWLMVM=m
+CONFIG_IWLWIFI_OPMODE_MODULAR=y
#
# Debugging Options
# CONFIG_IWLWIFI_DEBUG is not set
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
# CONFIG_IWLWIFI_P2P is not set
-# CONFIG_IWLWIFI_EXPERIMENTAL_MFP is not set
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
CONFIG_IWL3945=m
CONFIG_WL12XX=m
CONFIG_WLCORE=m
# CONFIG_WLCORE_SDIO is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
+CONFIG_WILINK_PLATFORM_DATA=y
+CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_RT2X00=m
CONFIG_RT2800PCI_RT33XX=y
CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT2800PCI_RT53XX=y
+CONFIG_RT2800PCI_RT3290=y
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
CONFIG_RT2800USB=m
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=m
+CONFIG_RT2X00_LIB_MMIO=m
CONFIG_RT2X00_LIB_PCI=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_ORINOCO_USB is not set
-CONFIG_IWM=m
-# CONFIG_IWM_DEBUG is not set
-# CONFIG_IWM_TRACING is not set
#
# WiMAX Wireless Broadband devices
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_CDC_NCM=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_HSO=m
CONFIG_USB_NET_INT51X1=m
CONFIG_USB_CDC_PHONET=m
+CONFIG_USB_SIERRA_NET=m
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
CONFIG_SLIP_SMART=y
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_NET_FC=y
+CONFIG_VXLAN=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set
#
CONFIG_AB3100_CORE=m
CONFIG_AB3100_OTP=m
CONFIG_LPC_SCH=m
+CONFIG_LPC_ICH=m
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_TTM=m
-# CONFIG_DRM_TDFX is not set
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_RADEON_KMS=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_NOUVEAU_BACKLIGHT=y
-# CONFIG_DRM_NOUVEAU_DEBUG is not set
#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
+# CONFIG_DRM_TDFX is not set
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_RADEON_UMS=y
+CONFIG_DRM_NOUVEAU=m
+CONFIG_NOUVEAU_DEBUG=5
+CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_SAVAGE=m
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_HDMI=y
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FB_DDC=m
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
+CONFIG_FB_HYPERV=m
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_ILI9320 is not set
CONFIG_SND_ES1968=m
# CONFIG_SND_FM801 is not set
CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_PREALLOC_SIZE=512
CONFIG_SND_HDA_HWDEP=y
# CONFIG_SND_HDA_RECONFIG is not set
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
-CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
CONFIG_SND_HDSP=m
CONFIG_SND_HDSPM=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_INFINIBAND_NES=m
# CONFIG_INFINIBAND_NES_DEBUG is not set
+# CONFIG_INFINIBAND_OCRDMA is not set
CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
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_E7XXX=m
CONFIG_EDAC_E752X=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_INTEL_IPS=m
CONFIG_MXM_WMI=m
+# CONFIG_PVPANIC is not set
#
# Firmware Drivers
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_WORKQUEUE=y
-# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_ABLK_HELPER_X86=m
#
# Authenticated Encryption with Associated Data
#
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_AES_NI_INTEL=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
+CONFIG_CPU_RMAP=y
CONFIG_NLATTR=y
CONFIG_AVERAGE=y
CONFIG_CORDIC=m
-# x86_64
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32
-# Thu Aug 29 08:49:23 2013
+# Wed Dec 4 20:57:50 2013
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
CONFIG_ACPI_APEI=y
CONFIG_ACPI_APEI_GHES=y
CONFIG_ACPI_APEI_PCIEAER=y
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
CONFIG_ACPI_APEI_EINJ=m
CONFIG_ACPI_APEI_ERST_DEBUG=m
CONFIG_SFI=y
#
# CPUFreq processor drivers
#
+CONFIG_X86_INTEL_PSTATE=m
CONFIG_X86_PCC_CPUFREQ=m
CONFIG_X86_ACPI_CPUFREQ=m
CONFIG_X86_POWERNOW_K8=m
CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IP_TUNNEL=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_PE_SIP=m
#
# IP: Netfilter Configuration
CONFIG_IP_SCTP=m
# CONFIG_SCTP_DBG_MSG is not set
# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
CONFIG_RDS=m
CONFIG_RDS_RDMA=m
CONFIG_RDS_TCP=m
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
CONFIG_RPS=y
CONFIG_NETPRIO_CGROUP=y
+CONFIG_RFS_ACCEL=y
#
# Network testing
# CONFIG_CFG80211_DEBUGFS is not set
# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_CFG80211_WEXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_WEP=m
CONFIG_LIB80211_CRYPT_CCMP=m
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_MESSAGE_TRACING is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_WIMAX=m
CONFIG_WIMAX_DEBUG_LEVEL=8
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_NVME=m
CONFIG_BLK_DEV_OSD=m
CONFIG_BLK_DEV_SX8=m
# CONFIG_BLK_DEV_UB is not set
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_VIRTIO_BLK=m
# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_RSXX=m
CONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
CONFIG_SCSI_MPT2SAS=m
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS_LOGGING=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_LOGGING=y
CONFIG_SCSI_HPTIOP=m
# CONFIG_SCSI_BUSLOGIC is not set
CONFIG_VMWARE_PVSCSI=m
# CONFIG_SCSI_DC390T is not set
CONFIG_SCSI_DEBUG=m
CONFIG_SCSI_PMCRAID=m
+CONFIG_SCSI_PM8001=m
CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_MD_RAID1=m
CONFIG_MD_RAID10=m
CONFIG_MD_RAID456=m
-# CONFIG_MULTICORE_RAID456 is not set
# CONFIG_MD_MULTIPATH is not set
CONFIG_MD_FAULTY=m
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
CONFIG_DM_BUFIO=m
+CONFIG_DM_BIO_PRISON=m
CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_E1000E=m
CONFIG_IP1000=m
CONFIG_IGB=m
+CONFIG_IGB_HWMON=y
CONFIG_IGB_DCA=y
-CONFIG_IGB_PTP=y
CONFIG_IGBVF=m
CONFIG_NS83820=m
# CONFIG_HAMACHI is not set
CONFIG_MLX4_DEBUG=y
CONFIG_TEHUTI=m
CONFIG_BNX2X=m
+CONFIG_BNX2X_SRIOV=y
CONFIG_QLCNIC=m
+CONFIG_QLCNIC_SRIOV=y
CONFIG_QLGE=m
CONFIG_BNA=m
CONFIG_SFC=m
CONFIG_P54_PCI=m
CONFIG_P54_LEDS=y
CONFIG_ATH_COMMON=m
+CONFIG_ATH_CARDS=m
# CONFIG_ATH_DEBUG is not set
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
CONFIG_ATH9K_PCI=y
# CONFIG_ATH9K_AHB is not set
# CONFIG_ATH9K_DEBUGFS is not set
-CONFIG_ATH9K_RATE_CONTROL=y
-# CONFIG_ATH9K_HTC is not set
-CONFIG_AR9170_USB=m
-CONFIG_AR9170_LEDS=y
+# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
+CONFIG_CARL9170=m
+CONFIG_CARL9170_LEDS=y
+CONFIG_CARL9170_WPC=y
+# CONFIG_CARL9170_HWRNG is not set
CONFIG_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m
+CONFIG_IWLDVM=m
+CONFIG_IWLMVM=m
+CONFIG_IWLWIFI_OPMODE_MODULAR=y
#
# Debugging Options
# CONFIG_IWLWIFI_DEBUG is not set
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
# CONFIG_IWLWIFI_P2P is not set
-# CONFIG_IWLWIFI_EXPERIMENTAL_MFP is not set
CONFIG_IWLEGACY=m
CONFIG_IWL4965=m
CONFIG_IWL3945=m
CONFIG_WL12XX=m
CONFIG_WLCORE=m
# CONFIG_WLCORE_SDIO is not set
-CONFIG_WL12XX_PLATFORM_DATA=y
+CONFIG_WILINK_PLATFORM_DATA=y
+CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
CONFIG_ZD1211RW=m
# CONFIG_ZD1211RW_DEBUG is not set
CONFIG_RT2X00=m
CONFIG_RT2800PCI_RT33XX=y
CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT2800PCI_RT53XX=y
+CONFIG_RT2800PCI_RT3290=y
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
CONFIG_RT2800USB=m
CONFIG_RT2800USB_RT33XX=y
CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
CONFIG_RT2800USB_UNKNOWN=y
CONFIG_RT2800_LIB=m
+CONFIG_RT2X00_LIB_MMIO=m
CONFIG_RT2X00_LIB_PCI=m
CONFIG_RT2X00_LIB_USB=m
CONFIG_RT2X00_LIB=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_ORINOCO_USB is not set
-CONFIG_IWM=m
-# CONFIG_IWM_DEBUG is not set
-# CONFIG_IWM_TRACING is not set
#
# WiMAX Wireless Broadband devices
CONFIG_USB_NET_AX8817X=m
CONFIG_USB_NET_CDCETHER=m
CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_CDC_NCM=m
CONFIG_USB_NET_DM9601=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_HSO=m
CONFIG_USB_NET_INT51X1=m
CONFIG_USB_CDC_PHONET=m
+CONFIG_USB_SIERRA_NET=m
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
CONFIG_SLIP_SMART=y
# CONFIG_SLIP_MODE_SLIP6 is not set
CONFIG_NET_FC=y
+CONFIG_VXLAN=m
CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y
CONFIG_NETPOLL=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set
#
CONFIG_AB3100_CORE=m
CONFIG_AB3100_OTP=m
CONFIG_LPC_SCH=m
+CONFIG_LPC_ICH=m
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
CONFIG_REGULATOR_FIXED_VOLTAGE=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
CONFIG_DRM_TTM=m
-# CONFIG_DRM_TDFX is not set
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_RADEON_KMS=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_NOUVEAU_BACKLIGHT=y
-# CONFIG_DRM_NOUVEAU_DEBUG is not set
#
# I2C encoder or helper chips
#
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_SIL164=m
+# CONFIG_DRM_TDFX is not set
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+CONFIG_DRM_RADEON_UMS=y
+CONFIG_DRM_NOUVEAU=m
+CONFIG_NOUVEAU_DEBUG=5
+CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_SAVAGE=m
CONFIG_VGASTATE=m
CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_HDMI=y
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
CONFIG_FB_DDC=m
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
+CONFIG_FB_HYPERV=m
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
# CONFIG_LCD_ILI9320 is not set
CONFIG_SND_ES1968=m
# CONFIG_SND_FM801 is not set
CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_DSP_LOADER=y
CONFIG_SND_HDA_PREALLOC_SIZE=512
CONFIG_SND_HDA_HWDEP=y
# CONFIG_SND_HDA_RECONFIG is not set
CONFIG_SND_HDA_CODEC_CONEXANT=y
CONFIG_SND_HDA_CODEC_CA0110=y
CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_CA0132_DSP=y
CONFIG_SND_HDA_CODEC_CMEDIA=y
CONFIG_SND_HDA_CODEC_SI3054=y
CONFIG_SND_HDA_GENERIC=y
-CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
CONFIG_SND_HDSP=m
CONFIG_SND_HDSPM=m
CONFIG_MLX4_INFINIBAND=m
CONFIG_INFINIBAND_NES=m
# CONFIG_INFINIBAND_NES_DEBUG is not set
+# CONFIG_INFINIBAND_OCRDMA is not set
CONFIG_INFINIBAND_IPOIB=m
CONFIG_INFINIBAND_IPOIB_CM=y
CONFIG_INFINIBAND_IPOIB_DEBUG=y
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_AMD64_ERROR_INJECTION is not set
CONFIG_EDAC_E752X=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
# CONFIG_INTEL_MENLOW is not set
-# CONFIG_EEEPC_LAPTOP is not set
+CONFIG_EEEPC_LAPTOP=m
CONFIG_ACPI_WMI=m
# CONFIG_ACPI_ASUS is not set
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_ACPI_TOSHIBA=m
CONFIG_INTEL_IPS=m
CONFIG_MXM_WMI=m
+CONFIG_PVPANIC=y
#
# Firmware Drivers
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_ABLK_HELPER_X86=m
+CONFIG_CRYPTO_GLUE_HELPER_X86=m
#
# Authenticated Encryption with Associated Data
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XTS=m
-CONFIG_CRYPTO_FPU=m
#
# Hash modes
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_APIC_ARCHITECTURE=y
+CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPUMASK_OFFSTACK=y
+CONFIG_CPU_RMAP=y
CONFIG_NLATTR=y
CONFIG_AVERAGE=y
CONFIG_CORDIC=m
@@ -2177,6 +2177,8 @@ static int add_stripe_bio(struct stripe_
bi->bi_next = *bip;
*bip = bi;
- bi->bi_phys_segments++;
+ raid5_inc_bi_active_stripes(bi);
+ if (bio_rw_flagged(bi, BIO_RW_SYNCIO) && !forwrite)
+ clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags); /* force to read from disk. */
--- /dev/null
+--- linux-2.6.32-431.3.1.el6-debug/fs/namei.c-orig 2014-01-30 19:53:32.885946633 -0500
++++ linux-2.6.32-431.3.1.el6-debug/fs/namei.c 2014-01-30 21:10:31.880946625 -0500
+@@ -2897,6 +2897,7 @@ out_release:
+ path_put(&nd.path);
+ putname(to);
+ if (retry_estale(error, how)) {
++ path_put(&old_path);
+ how |= LOOKUP_REVAL;
+ goto retry;
+ }
bh_lru_size_config.patch
quota-replace-dqptr-sem.patch
quota-avoid-dqget-calls.patch
+vfs_linkat_leakfix.patch
lnxmaj="2.6.32"
-lnxrel="358.23.2.el6"
+lnxrel="431.3.1.el6"
KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
SERIES=2.6-rhel6.series
SERIES VERSION COMMENT
SUPPORTED KERNELS:
-2.6-rhel6 RHEL6: 2.6.32-358.23.2.el6
+2.6-rhel6 RHEL6: 2.6.32-431.3.1.el6
CLIENT SUPPORT FOR UNPATCHED KERNELS:
2.6.18-348.3.1.el5 (RHEL5)
- 2.6.32-358.23.2.el6 (RHEL6)
+ 2.6.32-431.3.1.el6 (RHEL6)
2.6.16.60-0.69.1 (SLES10)
2.6.27.19-5 (SLES11)
[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.3.55) ] &&
TESTS="4094 4095"
+ # skip long symlink name for rhel6.5.
+ # rhel6.5 has a limit (PATH_MAX - sizeof(struct filename))
+ grep -q '6.5' /etc/redhat-release && TESTS="59 60 61 4062 4063"
+
for i in $TESTS; do
local SYMNAME=$(str_repeat 'x' $i)
ln -s $SYMNAME $DIR/$tdir/f$i || error "failed $i-char symlink"