Add support for RHEL6.3 kernel 2.6.32-279.2.1.el6.
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Signed-off-by: yang sheng <ys@whamcloud.com>
Change-Id: I792b174c77d635100cd02dbbddef568b550d6ed1
Reviewed-on: http://review.whamcloud.com/3033
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Fan Yong <yong.fan@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
-Index: linux-stage/fs/ext4/dir.c
-===================================================================
---- linux-stage.orig/fs/ext4/dir.c 2011-04-19 01:02:34.000000000 +0800
-+++ linux-stage/fs/ext4/dir.c 2011-04-19 01:24:36.000000000 +0800
-@@ -242,22 +242,50 @@
+diff -urp linux-stage.orig/fs/ext4/dir.c linux-stage/fs/ext4/dir.c
+--- linux-stage.orig/fs/ext4/dir.c 2012-06-21 10:26:23.000000000 -0400
++++ linux-stage/fs/ext4/dir.c 2012-06-21 10:37:39.000000000 -0400
+@@ -247,22 +247,63 @@ out:
return ret;
}
+
/*
* These functions convert from the major/minor hash to an f_pos
- * value.
+- * value.
++ * value for dx directories.
*
- * Currently we only use major hash numer. This is unfortunate, but
- * on 32-bit machines, the same VFS interface is used for lseek and
- * a 64-bit version of the system call or the 32-bit version of the
- * system call. Worse yet, NFSv2 only allows for a 32-bit readdir
- * cookie. Sigh.
-+ * Up layer (OSD) should specify O_32BITHASH or O_64BITHASH explicitly.
-+ * On the other hand, we allow ldiskfs to be mounted directly on both 32-bit
-+ * and 64-bit nodes, under such case, neither O_32BITHASH nor O_64BITHASH is
-+ * specified.
- */
--#define hash2pos(major, minor) (major >> 1)
--#define pos2maj_hash(pos) ((pos << 1) & 0xffffffff)
--#define pos2min_hash(pos) (0)
++ * Upper layer (for example NFS) should specify FMODE_32BITHASH or
++ * FMODE_64BITHASH explicitly. On the other hand, we allow ext4 to be mounted
++ * directly on both 32-bit and 64-bit nodes, under such case, neither
++ * FMODE_32BITHASH nor FMODE_64BITHASH is specified.
++ */
+static inline loff_t hash2pos(struct file *filp, __u32 major, __u32 minor)
+{
-+ if ((filp->f_flags & O_32BITHASH) ||
-+ (!(filp->f_flags & O_64BITHASH) && is_32bit_api()))
-+ return (major >> 1);
++ if ((filp->f_mode & FMODE_32BITHASH) ||
++ (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
++ return major >> 1;
+ else
-+ return (((__u64)(major >> 1) << 32) | (__u64)minor);
++ return ((__u64)(major >> 1) << 32) | (__u64)minor;
+}
+
+static inline __u32 pos2maj_hash(struct file *filp, loff_t pos)
+{
-+ if ((filp->f_flags & O_32BITHASH) ||
-+ (!(filp->f_flags & O_64BITHASH) && is_32bit_api()))
-+ return ((pos << 1) & 0xffffffff);
++ if ((filp->f_mode & FMODE_32BITHASH) ||
++ (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
++ return (pos << 1) & 0xffffffff;
+ else
-+ return (((pos >> 32) << 1) & 0xffffffff);
++ return ((pos >> 32) << 1) & 0xffffffff;
+}
+
+static inline __u32 pos2min_hash(struct file *filp, loff_t pos)
+{
-+ if ((filp->f_flags & O_32BITHASH) ||
-+ (!(filp->f_flags & O_64BITHASH) && is_32bit_api()))
-+ return (0);
++ if ((filp->f_mode & FMODE_32BITHASH) ||
++ (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
++ return 0;
+ else
-+ return (pos & 0xffffffff);
++ return pos & 0xffffffff;
+}
++
++/*
++ * Return 32- or 64-bit end-of-file for dx directories
+ */
+-#define hash2pos(major, minor) (major >> 1)
+-#define pos2maj_hash(pos) ((pos << 1) & 0xffffffff)
+-#define pos2min_hash(pos) (0)
++static inline loff_t ext4_get_htree_eof(struct file *filp)
++{
++ if ((filp->f_mode & FMODE_32BITHASH) ||
++ (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
++ return EXT4_HTREE_EOF_32BIT;
++ else
++ return EXT4_HTREE_EOF_64BIT;
++}
++
/*
* This structure holds the nodes of the red-black tree used to store
-@@ -318,15 +346,16 @@
+@@ -323,15 +364,16 @@ static void free_rb_tree_fname(struct rb
}
return p;
}
-@@ -422,7 +451,7 @@
+@@ -427,7 +469,7 @@ static int call_filldir(struct file *fil
"null fname?!?\n");
return 0;
}
while (fname) {
error = filldir(dirent, fname->name,
fname->name_len, curr_pos,
-@@ -447,7 +476,7 @@
+@@ -452,13 +494,13 @@ static int ext4_dx_readdir(struct file *
int ret;
if (!info) {
if (!info)
return -ENOMEM;
filp->private_data = info;
-@@ -461,8 +490,8 @@
+ }
+
+- if (filp->f_pos == EXT4_HTREE_EOF)
++ if (filp->f_pos == ext4_get_htree_eof(filp))
+ return 0; /* EOF */
+
+ /* Some one has messed with f_pos; reset the world */
+@@ -466,8 +508,8 @@ static int ext4_dx_readdir(struct file *
free_rb_tree_fname(&info->root);
info->curr_node = NULL;
info->extra_fname = NULL;
}
/*
-Index: linux-stage/fs/ext4/ext4.h
-===================================================================
---- linux-stage.orig/fs/ext4/ext4.h 2011-04-19 01:02:34.000000000 +0800
-+++ linux-stage/fs/ext4/ext4.h 2011-04-19 01:02:34.000000000 +0800
-@@ -55,6 +55,14 @@
- #define ext4_debug(f, a...) do {} while (0)
- #endif
+@@ -499,7 +541,7 @@ static int ext4_dx_readdir(struct file *
+ if (ret < 0)
+ return ret;
+ if (ret == 0) {
+- filp->f_pos = EXT4_HTREE_EOF;
++ filp->f_pos = ext4_get_htree_eof(filp);
+ break;
+ }
+ info->curr_node = rb_first(&info->root);
+@@ -519,7 +561,7 @@ static int ext4_dx_readdir(struct file *
+ info->curr_minor_hash = fname->minor_hash;
+ } else {
+ if (info->next_hash == ~0) {
+- filp->f_pos = EXT4_HTREE_EOF;
++ filp->f_pos = ext4_get_htree_eof(filp);
+ break;
+ }
+ info->curr_hash = info->next_hash;
+diff -urp linux-stage.orig/fs/ext4/ext4.h linux-stage/fs/ext4/ext4.h
+--- linux-stage.orig/fs/ext4/ext4.h 2012-06-21 10:26:23.000000000 -0400
++++ linux-stage/fs/ext4/ext4.h 2012-06-21 10:39:43.000000000 -0400
+@@ -816,6 +816,16 @@ struct ext4_inode_info {
+ __u64 i_fs_version;
+ };
-+#ifndef O_32BITHASH
-+# define O_32BITHASH 0x10000000
++#ifndef FMODE_32BITHASH
++/* 32bit hashes as llseek() offset (for directories) */
++#define FMODE_32BITHASH ((__force fmode_t)0x200)
+#endif
+
-+#ifndef O_64BITHASH
-+# define O_64BITHASH 0x20000000
++#ifndef FMODE_64BITHASH
++/* 64bit hashes as llseek() offset (for directories) */
++#define FMODE_64BITHASH ((__force fmode_t)0x400)
+#endif
+
#define HAVE_DISK_INODE_VERSION
- /* data type for block offset of block group */
+ /*
+@@ -1450,7 +1460,11 @@ struct dx_hash_info
+ u32 *seed;
+ };
+
+-#define EXT4_HTREE_EOF 0x7fffffff
++
++/* 32 and 64 bit signed EOF for dx directories */
++#define EXT4_HTREE_EOF_32BIT ((1UL << (32 - 1)) - 1)
++#define EXT4_HTREE_EOF_64BIT ((1ULL << (64 - 1)) - 1)
++
+
+ /*
+ * Control parameters used by ext4_htree_next_block
+diff -urp linux-stage.orig/fs/ext4/hash.c linux-stage/fs/ext4/hash.c
+--- linux-stage.orig/fs/ext4/hash.c 2012-06-21 10:26:23.000000000 -0400
++++ linux-stage/fs/ext4/hash.c 2012-06-21 10:29:02.000000000 -0400
+@@ -201,8 +201,8 @@ int ext4fs_dirhash(const char *name, int
+ return -1;
+ }
+ hash = hash & ~1;
+- if (hash == (EXT4_HTREE_EOF << 1))
+- hash = (EXT4_HTREE_EOF-1) << 1;
++ if (hash == (EXT4_HTREE_EOF_32BIT << 1))
++ hash = (EXT4_HTREE_EOF_32BIT - 1) << 1;
+ hinfo->hash = hash;
+ hinfo->minor_hash = minor_hash;
+ return 0;
return 0;
}
-@@ -2693,56 +2692,52 @@ static inline int ext4_issue_discard(str
+@@ -2693,58 +2692,54 @@ static inline int ext4_issue_discard(str
* This function is called by the jbd2 layer once the commit has finished,
* so we know we can free the blocks that were released with that commit.
*/
+ mb_debug(1, "gonna free %u blocks in group %u (0x%p):",
+ entry->efd_count, entry->efd_group, entry);
-- if (test_opt(sb, DISCARD)) {
-- int ret;
-- ret = ext4_issue_discard(sb, entry->group,
-- entry->start_blk, entry->count);
-- if (unlikely(ret == -EOPNOTSUPP)) {
-- ext4_warning(sb, "discard not supported, "
-- "disabling");
-- clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
-- }
-+ if (test_opt(sb, DISCARD)) {
-+ int ret;
-+ ret = ext4_issue_discard(sb, entry->efd_group,
+- if (test_opt(sb, DISCARD))
+- ext4_issue_discard(sb, entry->group,
+- entry->start_blk, entry->count);
++ if (test_opt(sb, DISCARD))
++ ext4_issue_discard(sb, entry->efd_group,
+ entry->efd_start_blk, entry->efd_count);
-+ if (unlikely(ret == -EOPNOTSUPP)) {
-+ ext4_warning(sb, "discard not supported, "
-+ "disabling");
-+ clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
- }
-+ }
- err = ext4_mb_load_buddy(sb, entry->group, &e4b);
- /* we expect to find existing buddy because it's pinned */
- rb_erase(&entry->node, &(db->bb_free_root));
- mb_free_blocks(NULL, &e4b, entry->start_blk, entry->count);
-
+- /*
+- * Clear the trimmed flag for the group so that the next
+- * ext4_trim_fs can trim it.
+- * If the volume is mounted with -o discard, online discard
+- * is supported and the free blocks will be trimmed online.
+- */
+- if (!test_opt(sb, DISCARD))
+- EXT4_MB_GRP_CLEAR_TRIMMED(db);
+-
- if (!db->bb_free_root.rb_node) {
- /* No more items in the per group rb tree
- * balance refcounts from ext4_mb_free_metadata()
+ rb_erase(&entry->efd_node, &(db->bb_free_root));
+ mb_free_blocks(NULL, &e4b, entry->efd_start_blk, entry->efd_count);
+
++ /*
++ * Clear the trimmed flag for the group so that the next
++ * ext4_trim_fs can trim it.
++ * If the volume is mounted with -o discard, online discard
++ * is supported and the free blocks will be trimmed online.
++ */
++ if (!test_opt(sb, DISCARD))
++ EXT4_MB_GRP_CLEAR_TRIMMED(db);
++
+ if (!db->bb_free_root.rb_node) {
+ /* No more items in the per group rb tree
+ * balance refcounts from ext4_mb_free_metadata()
diff -urpN linux-stage.orig/fs/ext4/balloc.c linux-stage/fs/ext4/balloc.c
---- linux-stage.orig/fs/ext4/balloc.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/balloc.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/balloc.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/balloc.c 2012-07-02 12:07:57.000000000 -0400
@@ -97,7 +97,7 @@ unsigned ext4_init_block_bitmap(struct s
/* If checksum is bad mark all blocks used to prevent allocation
* essentially implementing a per-group read-only flag. */
(ext4_fsblk_t)(block + i));
BUFFER_TRACE(bitmap_bh, "bit already cleared");
diff -urpN linux-stage.orig/fs/ext4/dir.c linux-stage/fs/ext4/dir.c
---- linux-stage.orig/fs/ext4/dir.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/dir.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/dir.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/dir.c 2012-07-02 12:07:57.000000000 -0400
@@ -70,28 +70,29 @@ int ext4_check_dir_entry(const char *fun
const int rlen = ext4_rec_len_from_disk(de->rec_len,
dir->i_sb->s_blocksize);
inode->i_ino,
(unsigned long long) filp->f_pos);
diff -urpN linux-stage.orig/fs/ext4/ext4_extents.h linux-stage/fs/ext4/ext4_extents.h
---- linux-stage.orig/fs/ext4/ext4_extents.h 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/ext4_extents.h 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/ext4_extents.h 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/ext4_extents.h 2012-07-02 12:07:57.000000000 -0400
@@ -138,7 +138,7 @@ typedef int (*ext_prepare_callback)(stru
#define EXT_REPEAT 2
/*
* EXT_INIT_MAX_LEN is the maximum number of blocks we can have in an
diff -urpN linux-stage.orig/fs/ext4/ext4.h linux-stage/fs/ext4/ext4.h
---- linux-stage.orig/fs/ext4/ext4.h 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/ext4.h 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/ext4.h 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/ext4.h 2012-07-02 12:10:15.000000000 -0400
@@ -23,6 +23,7 @@
#include <linux/quota.h>
#include <linux/rwsem.h>
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,
+@@ -1774,11 +1828,19 @@ struct ext4_group_info {
+ * 5 free 8-block regions. */
+ };
+
+-#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
++#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
++#define EXT4_GROUP_INFO_WAS_TRIMMED_BIT 1
+
+ #define EXT4_MB_GRP_NEED_INIT(grp) \
+ (test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state)))
+
++#define EXT4_MB_GRP_WAS_TRIMMED(grp) \
++ (test_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
++#define EXT4_MB_GRP_SET_TRIMMED(grp) \
++ (set_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
++#define EXT4_MB_GRP_CLEAR_TRIMMED(grp) \
++ (clear_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
++
+ #define EXT4_MAX_CONTENTION 8
+ #define EXT4_CONTENTION_THRESHOLD 2
+
diff -urpN linux-stage.orig/fs/ext4/ext4_jbd2.c linux-stage/fs/ext4/ext4_jbd2.c
---- linux-stage.orig/fs/ext4/ext4_jbd2.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/ext4_jbd2.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/ext4_jbd2.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/ext4_jbd2.c 2012-07-02 12:07:57.000000000 -0400
@@ -96,7 +96,7 @@ int __ext4_handle_dirty_metadata(const c
if (inode && inode_needs_sync(inode)) {
sync_dirty_buffer(bh);
"inode=%lu, block=%llu",
inode->i_ino,
diff -urpN linux-stage.orig/fs/ext4/extents.c linux-stage/fs/ext4/extents.c
---- linux-stage.orig/fs/ext4/extents.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/extents.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/extents.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/extents.c 2012-07-02 12:07:57.000000000 -0400
@@ -437,7 +437,7 @@ static int __ext4_ext_check(const char *
return 0;
/*
diff -urpN linux-stage.orig/fs/ext4/ialloc.c linux-stage/fs/ext4/ialloc.c
---- linux-stage.orig/fs/ext4/ialloc.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/ialloc.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/ialloc.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/ialloc.c 2012-07-02 12:07:57.000000000 -0400
@@ -76,7 +76,7 @@ unsigned ext4_init_inode_bitmap(struct s
/* If checksum is bad mark all blocks and inodes use to prevent
* allocation, essentially implementing a per-group read-only flag. */
printk(KERN_NOTICE "ext4_test_bit(bit=%d, block=%llu) = %d\n",
bit, (unsigned long long)bitmap_bh->b_blocknr,
diff -urpN linux-stage.orig/fs/ext4/inode.c linux-stage/fs/ext4/inode.c
---- linux-stage.orig/fs/ext4/inode.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/inode.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/inode.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/inode.c 2012-07-02 12:07:57.000000000 -0400
@@ -246,7 +246,7 @@ void ext4_delete_inode(struct inode *ino
inode->i_size = 0;
err = ext4_mark_inode_dirty(handle, inode);
" some EAs or run e2fsck.",
inode->i_ino);
diff -urpN linux-stage.orig/fs/ext4/mballoc.c linux-stage/fs/ext4/mballoc.c
---- linux-stage.orig/fs/ext4/mballoc.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/mballoc.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/mballoc.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/mballoc.c 2012-07-02 12:07:57.000000000 -0400
@@ -862,8 +862,6 @@ static int ext4_mb_init_cache(struct pag
err = 0;
/*
* This function is called by the jbd2 layer once the commit has finished,
* so we know we can free the blocks that were released with that commit.
-@@ -2583,17 +2598,11 @@ static void release_blocks_on_commit(jou
+@@ -2581,22 +2596,9 @@ static void release_blocks_on_commit(jou
+ mb_debug(1, "gonna free %u blocks in group %u (0x%p):",
+ entry->count, entry->group, entry);
- if (test_opt(sb, DISCARD)) {
- int ret;
+- if (test_opt(sb, DISCARD)) {
+- int ret;
- ext4_fsblk_t discard_block;
-
- discard_block = entry->start_blk +
- if (ret == EOPNOTSUPP) {
- ext4_warning(sb, __func__,
- "discard not supported, disabling");
-+ ret = ext4_issue_discard(sb, entry->group,
-+ entry->start_blk, entry->count);
-+ if (unlikely(ret == -EOPNOTSUPP)) {
-+ ext4_warning(sb, "discard not supported, "
-+ "disabling");
- clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
- }
- }
-@@ -2620,7 +2629,7 @@ static void release_blocks_on_commit(jou
+- clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
+- }
+- }
++ if (test_opt(sb, DISCARD))
++ ext4_issue_discard(sb, entry->group,
++ entry->start_blk, entry->count);
+
+ err = ext4_mb_load_buddy(sb, entry->group, &e4b);
+ /* we expect to find existing buddy because it's pinned */
+@@ -2611,6 +2613,15 @@ static void release_blocks_on_commit(jou
+ rb_erase(&entry->node, &(db->bb_free_root));
+ mb_free_blocks(NULL, &e4b, entry->start_blk, entry->count);
+
++ /*
++ * Clear the trimmed flag for the group so that the next
++ * ext4_trim_fs can trim it.
++ * If the volume is mounted with -o discard, online discard
++ * is supported and the free blocks will be trimmed online.
++ */
++ if (!test_opt(sb, DISCARD))
++ EXT4_MB_GRP_CLEAR_TRIMMED(db);
++
+ if (!db->bb_free_root.rb_node) {
+ /* No more items in the per group rb tree
+ * balance refcounts from ext4_mb_free_metadata()
+@@ -2620,7 +2631,7 @@ static void release_blocks_on_commit(jou
}
ext4_unlock_group(sb, entry->group);
kmem_cache_free(ext4_free_ext_cachep, entry);
}
mb_debug(1, "freed %u blocks in %u structures\n", count, count2);
-@@ -2757,7 +2766,7 @@ ext4_mb_mark_diskspace_used(struct ext4_
+@@ -2757,7 +2768,7 @@ ext4_mb_mark_diskspace_used(struct ext4_
len = ac->ac_b_ex.fe_len;
if (!ext4_data_block_valid(sbi, block, len)) {
"Allocating blocks %llu-%llu which overlap "
"fs metadata\n", block, block+len);
/* File system mounted not to panic on error
-@@ -3671,14 +3680,14 @@ ext4_mb_discard_group_preallocations(str
+@@ -3671,14 +3682,14 @@ ext4_mb_discard_group_preallocations(str
bitmap_bh = ext4_read_block_bitmap(sb, group);
if (bitmap_bh == NULL) {
"information for %u", group);
put_bh(bitmap_bh);
return 0;
-@@ -3852,14 +3861,14 @@ repeat:
+@@ -3852,14 +3863,14 @@ repeat:
err = ext4_mb_load_buddy(sb, group, &e4b);
if (err) {
"bitmap for %u", group);
ext4_mb_unload_buddy(&e4b);
continue;
-@@ -4125,7 +4134,7 @@ ext4_mb_discard_lg_preallocations(struct
+@@ -4125,7 +4136,7 @@ ext4_mb_discard_lg_preallocations(struct
ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, NULL);
if (ext4_mb_load_buddy(sb, group, &e4b)) {
"information for %u", group);
continue;
}
-@@ -4516,7 +4525,7 @@ void ext4_mb_free_blocks(handle_t *handl
+@@ -4516,7 +4527,7 @@ void ext4_mb_free_blocks(handle_t *handl
if (block < le32_to_cpu(es->s_first_data_block) ||
block + count < block ||
block + count > ext4_blocks_count(es)) {
"Freeing blocks not in datazone - "
"block = %llu, count = %lu", block, count);
goto error_return;
-@@ -4561,7 +4570,7 @@ do_more:
+@@ -4561,7 +4572,7 @@ do_more:
in_range(block + count - 1, ext4_inode_table(sb, gdp),
EXT4_SB(sb)->s_itb_per_group)) {
"Block = %llu, count = %lu", block, count);
/* err = 0. ext4_std_error should be a no op */
diff -urpN linux-stage.orig/fs/ext4/move_extent.c linux-stage/fs/ext4/move_extent.c
---- linux-stage.orig/fs/ext4/move_extent.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/move_extent.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/move_extent.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/move_extent.c 2012-07-02 12:07:57.000000000 -0400
@@ -152,12 +152,12 @@ mext_check_null_inode(struct inode *inod
int ret = 0;
"Both inodes should not be NULL: "
"inode1 %lu inode2 NULL", inode1->i_ino);
ret = -EIO;
+@@ -483,7 +483,7 @@ mext_leaf_block(handle_t *handle, struct
+
+ o_start = o_end = oext = orig_path[depth].p_ext;
+ oext_alen = ext4_ext_get_actual_len(oext);
+- start_ext.ee_len = end_ext.ee_len = 0;
++ start_ext.ee_block = start_ext.ee_len = end_ext.ee_len = 0;
+
+ new_ext.ee_block = cpu_to_le32(*from);
+ ext4_ext_store_pblock(&new_ext, ext_pblock(dext));
@@ -528,7 +528,7 @@ mext_leaf_block(handle_t *handle, struct
* new_ext |-------|
*/
"sum of replaced: %llu requested: %llu",
*moved_len, len);
diff -urpN linux-stage.orig/fs/ext4/namei.c linux-stage/fs/ext4/namei.c
---- linux-stage.orig/fs/ext4/namei.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/namei.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/namei.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/namei.c 2012-07-02 12:07:57.000000000 -0400
@@ -394,8 +394,7 @@ dx_probe(const struct qstr *d_name, stru
if (root->info.hash_version != DX_HASH_TEA &&
root->info.hash_version != DX_HASH_HALF_MD4 &&
"invalid rec_len for '..' in inode %lu",
dir->i_ino);
brelse(bh);
-@@ -1588,8 +1594,7 @@ static int ext4_dx_add_entry(handle_t *h
+@@ -1468,10 +1474,22 @@ static int make_indexed_dir(handle_t *ha
+ frame->at = entries;
+ frame->bh = bh;
+ bh = bh2;
++
++ ext4_handle_dirty_metadata(handle, dir, frame->bh);
++ ext4_handle_dirty_metadata(handle, dir, bh);
++
+ de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
+- dx_release (frames);
+- if (!(de))
++ if (!de) {
++ /*
++ * Even if the block split failed, we have to properly write
++ * out all the changes we did so far. Otherwise we can end up
++ * with corrupted filesystem.
++ */
++ ext4_mark_inode_dirty(handle, dir);
++ dx_release(frames);
+ return retval;
++ }
++ dx_release(frames);
+
+ retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
+ brelse(bh);
+@@ -1588,8 +1606,7 @@ static int ext4_dx_add_entry(handle_t *h
if (levels && (dx_get_count(frames->entries) ==
dx_get_limit(frames->entries))) {
err = -ENOSPC;
goto cleanup;
}
-@@ -1943,11 +1948,11 @@ static int empty_dir(struct inode *inode
+@@ -1943,11 +1960,11 @@ static int empty_dir(struct inode *inode
if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2) ||
!(bh = ext4_bread(NULL, inode, 0, 0, &err))) {
if (err)
"bad directory (dir #%lu) - no data block",
inode->i_ino);
return 1;
-@@ -1958,7 +1963,7 @@ static int empty_dir(struct inode *inode
+@@ -1958,7 +1975,7 @@ static int empty_dir(struct inode *inode
!le32_to_cpu(de1->inode) ||
strcmp(".", de->name) ||
strcmp("..", de1->name)) {
"bad directory (dir #%lu) - no `.' or `..'",
inode->i_ino);
brelse(bh);
-@@ -1976,7 +1981,7 @@ static int empty_dir(struct inode *inode
+@@ -1976,7 +1993,7 @@ static int empty_dir(struct inode *inode
offset >> EXT4_BLOCK_SIZE_BITS(sb), 0, &err);
if (!bh) {
if (err)
"error %d reading directory"
" #%lu offset %u",
err, inode->i_ino, offset);
-@@ -2198,7 +2203,7 @@ static int ext4_rmdir(struct inode *dir,
+@@ -2198,7 +2215,7 @@ static int ext4_rmdir(struct inode *dir,
if (retval)
goto end_rmdir;
if (!EXT4_DIR_LINK_EMPTY(inode))
"empty directory has too many links (%d)",
inode->i_nlink);
inode->i_version++;
-@@ -2250,7 +2255,7 @@ static int ext4_unlink(struct inode *dir
+@@ -2250,7 +2267,7 @@ static int ext4_unlink(struct inode *dir
goto end_unlink;
if (!inode->i_nlink) {
"Deleting nonexistent file (%lu), %d",
inode->i_ino, inode->i_nlink);
inode->i_nlink = 1;
-@@ -2497,7 +2502,7 @@ static int ext4_rename(struct inode *old
+@@ -2497,7 +2514,7 @@ static int ext4_rename(struct inode *old
}
}
if (retval) {
old_dir->i_ino, old_dir->i_nlink, retval);
}
diff -urpN linux-stage.orig/fs/ext4/resize.c linux-stage/fs/ext4/resize.c
---- linux-stage.orig/fs/ext4/resize.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/resize.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/resize.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/resize.c 2012-07-02 12:07:57.000000000 -0400
@@ -48,63 +48,63 @@ static int verify_group_input(struct sup
ext4_get_group_no_and_offset(sb, start, NULL, &offset);
mutex_unlock(&EXT4_SB(sb)->s_resize_lock);
ext4_journal_stop(handle);
diff -urpN linux-stage.orig/fs/ext4/super.c linux-stage/fs/ext4/super.c
---- linux-stage.orig/fs/ext4/super.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/super.c 2012-07-02 11:19:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/super.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/super.c 2012-07-02 12:07:57.000000000 -0400
@@ -48,11 +48,16 @@
#include "acl.h"
#include "mballoc.h"
kset_unregister(ext4_kset);
exit_ext4_system_zone();
diff -urpN linux-stage.orig/fs/ext4/xattr.c linux-stage/fs/ext4/xattr.c
---- linux-stage.orig/fs/ext4/xattr.c 2012-07-02 10:32:05.000000000 -0400
-+++ linux-stage/fs/ext4/xattr.c 2012-07-02 11:15:32.000000000 -0400
+--- linux-stage.orig/fs/ext4/xattr.c 2012-07-02 12:07:23.000000000 -0400
++++ linux-stage/fs/ext4/xattr.c 2012-07-02 12:07:57.000000000 -0400
@@ -227,7 +227,7 @@ ext4_xattr_block_get(struct inode *inode
ea_bdebug(bh, "b_count=%d, refcount=%d",
atomic_read(&(bh->b_count)), le32_to_cpu(BHDR(bh)->h_refcount));
struct ext4_dir_entry_2 *de, *de2, *dot_de, *dotdot_de;
char *data1, *top;
@@ -1517,7 +1867,7 @@ static int make_indexed_dir(handle_t *ha
- frame->at = entries;
- frame->bh = bh;
- bh = bh2;
+ ext4_handle_dirty_metadata(handle, dir, frame->bh);
+ ext4_handle_dirty_metadata(handle, dir, bh);
+
- de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
+ de = do_split(handle,dir, &bh, frames, frame, &hinfo, NULL, &retval);
- dx_release (frames);
- if (!(de))
- return retval;
+ if (!de) {
+ /*
+ * Even if the block split failed, we have to properly write
@@ -1616,7 +1966,7 @@ out:
* the entry, as someone else might have used it while you slept.
*/
ext4-xattr-no-update-ctime-rhel5.patch
ext4-prealloc-rhel6.patch
ext4-mballoc-extra-checks-rhel6.patch
-ext4-misc-rhel6.patch
+ext4-misc-rhel6.patch
ext4-big-endian-check-2.6-rhel6.patch
ext4-alloc-policy-2.6-rhel5.patch
ext4-force_over_128tb-rhel6.patch
ext4-disable-mb-cache-rhel6.patch
ext4-back-dquot-to-rhel6.patch
ext4-nocmtime-2.6-rhel5.patch
-ext4-export-64bit-name-hash.patch
ext4-vmalloc-rhel6.patch
ext4-journal-callback.patch
ext4-store-tree-generation-at-find.patch
* version 2.3.0
* See http://wiki.whamcloud.com/display/PUB/Lustre+Support+Matrix
* Server support for kernels:
- 2.6.32-220.17.1.el6 (RHEL6)
+ 2.6.32-279.2.1.el6 (RHEL6)
* Client support for unpatched kernels:
- 2.6.32-220.17.1.el6 (RHEL6)
+ 2.6.32-279.2.1.el6 (RHEL6)
2.6.27.19-5 (SLES11)
2.6.18-238.19.1.el5 (RHEL5)
2.6.16.60-0.69.1 (SLES10)
the re-exporting nodes to be mounted with "32bitapi" mount option
Severity : enhancement
+Jira : LU-1477
+Description: Update RHEL6.3 kernel to 2.6.32-279.2.1.el6.
+
+Severity : enhancement
Jira : LU-1424
Description: Update RHEL6.2 kernel to 2.6.32-220.17.1.el6
#include <linux/timer.h>
#endif
-#ifdef __KERNEL__
-# ifndef HAVE_SERVER_SUPPORT
-
-/* hash info structure used by the directory hash */
-# define LDISKFS_DX_HASH_LEGACY 0
-# define LDISKFS_DX_HASH_HALF_MD4 1
-# define LDISKFS_DX_HASH_TEA 2
-# define LDISKFS_DX_HASH_R5 3
-# define LDISKFS_DX_HASH_SAME 4
-# define LDISKFS_DX_HASH_MAX 4
-
-/* hash info structure used by the directory hash */
-struct ldiskfs_dx_hash_info
-{
- u32 hash;
- u32 minor_hash;
- int hash_version;
- u32 *seed;
-};
-
-# define LDISKFS_HTREE_EOF 0x7fffffff
-
-int ldiskfsfs_dirhash(const char *name, int len, struct ldiskfs_dx_hash_info *hinfo);
-
-# endif /* HAVE_SERVER_SUPPORT */
-#endif /* __KERNEL__ */
-
/* obdo.c */
#ifdef __KERNEL__
void obdo_from_la(struct obdo *dst, struct lu_attr *la, __u64 valid);
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32
-# Tue Dec 20 23:41:08 2011
+# Thu Jun 21 03:59:07 2012
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
CONFIG_KTIME_SCALAR=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
#
# General setup
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
+CONFIG_ARCH_RANDOM=y
CONFIG_EFI=y
# CONFIG_SECCOMP is not set
CONFIG_CC_STACKPROTECTOR=y
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
+CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_DRR=m
+CONFIG_NET_SCH_MQPRIO=m
+CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_INGRESS=m
#
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
+CONFIG_NETPRIO_CGROUP=y
#
# Network testing
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEFAULT_PS_VALUE=1
# CONFIG_CFG80211_DEBUGFS is not set
-# CONFIG_WIRELESS_OLD_REGULATORY is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel"
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
CONFIG_BLK_DEV_FD=m
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
+CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
# CONFIG_BLK_CPQ_DA is not set
CONFIG_BLK_CPQ_CISS_DA=m
CONFIG_CISS_SCSI_TAPE=y
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
-# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
+CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
# CONFIG_PCMCIA_AHA152X is not set
CONFIG_PCMCIA_FDOMAIN=m
CONFIG_MD_FAULTY=m
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
+CONFIG_DM_BUFIO=m
+CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_THIN_PROVISIONING=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
+# CONFIG_DM_DEBUG_SPACE_MAPS is not set
CONFIG_DM_MIRROR=m
CONFIG_DM_RAID=m
CONFIG_DM_LOG_USERSPACE=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_ATL1E=m
CONFIG_ATL1C=m
CONFIG_JME=m
+CONFIG_PCH_GBE=m
CONFIG_NETDEV_10000=y
CONFIG_MDIO=m
CONFIG_CHELSIO_T1=m
CONFIG_P54_PCI=m
CONFIG_P54_LEDS=y
CONFIG_ATH_COMMON=m
+# CONFIG_ATH_DEBUG is not set
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
+# CONFIG_ATH5K_TRACER is not set
+CONFIG_ATH5K_PCI=y
+CONFIG_ATH9K_HW=m
+CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K=m
-# CONFIG_ATH9K_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_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
-CONFIG_IPW2200=m
-CONFIG_IPW2200_MONITOR=y
-CONFIG_IPW2200_RADIOTAP=y
-CONFIG_IPW2200_PROMISCUOUS=y
-CONFIG_IPW2200_QOS=y
-# CONFIG_IPW2200_DEBUG is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m
#
# CONFIG_IWLWIFI_DEBUG is not set
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_IWLAGN=m
-CONFIG_IWL4965=y
-CONFIG_IWL5000=y
+# CONFIG_IWLWIFI_DEVICE_SVTOOL is not set
+CONFIG_IWLWIFI_LEGACY=m
+
+#
+# Debugging Options
+#
+# CONFIG_IWLWIFI_LEGACY_DEBUG is not set
+# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not set
+CONFIG_IWL4965=m
CONFIG_IWL3945=m
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_PCI=m
CONFIG_HOSTAP_CS=m
CONFIG_B43=m
+CONFIG_B43_SSB=y
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_PIO=y
+# CONFIG_B43_PHY_N is not set
CONFIG_B43_PHY_LP=y
+# CONFIG_B43_PHY_HT is not set
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
-# CONFIG_B43_FORCE_PIO is not set
CONFIG_B43LEGACY=m
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
+# CONFIG_RT2800PCI is not set
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
# CONFIG_RT2800USB is not set
CONFIG_PCI_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_WL12XX=m
CONFIG_WL1251=m
CONFIG_WL1251_SDIO=m
+CONFIG_WL12XX_MENU=m
+CONFIG_WL12XX=m
+# CONFIG_WL12XX_SDIO is not set
+CONFIG_WL12XX_PLATFORM_DATA=y
CONFIG_IWM=m
# CONFIG_IWM_DEBUG is not set
+# CONFIG_IWM_TRACING is not set
#
# WiMAX Wireless Broadband devices
CONFIG_AGP_EFFICEON=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=64
-# CONFIG_VGA_SWITCHEROO is not set
+CONFIG_VGA_SWITCHEROO=y
CONFIG_DRM=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_TTM=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_HRTIMER=m
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
+CONFIG_SND_KCTL_JACK=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_RAWMIDI_SEQ=m
-# CONFIG_SND_OPL3_LIB_SEQ is not set
+CONFIG_SND_OPL3_LIB_SEQ=m
CONFIG_SND_OPL4_LIB_SEQ=m
# CONFIG_SND_SBAWE_SEQ is not set
CONFIG_SND_EMU10K1_SEQ=m
CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
CONFIG_SND_OPL4_LIB=m
CONFIG_SND_VX_LIB=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_BT87X=m
# CONFIG_SND_BT87X_OVERCLOCK is not set
CONFIG_SND_CA0106=m
-# CONFIG_SND_CMIPCI is not set
+CONFIG_SND_CMIPCI=m
CONFIG_SND_OXYGEN_LIB=m
CONFIG_SND_OXYGEN=m
# CONFIG_SND_CS4281 is not set
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB_ARCH_HAS_XHCI=y
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
-CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_PLTFM=m
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_AT91 is not set
CONFIG_PNFS_FILE_LAYOUT=m
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
-# CONFIG_NFS_USE_NEW_IDMAPPER is not set
CONFIG_NFSD=m
CONFIG_NFSD_DEPRECATED=y
CONFIG_NFSD_V2_ACL=y
CONFIG_BUILD_DOCSRC=y
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_DMA_API_DEBUG is not set
+CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_HAS_DMA=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_NLATTR=y
+CONFIG_AVERAGE=y
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.32
-# Tue Dec 20 15:42:19 2011
+# Thu Jun 21 04:00:46 2012
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
# CONFIG_KTIME_SCALAR is not set
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
#
# General setup
CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
CONFIG_ARCH_USES_PG_UNCACHED=y
+CONFIG_ARCH_RANDOM=y
CONFIG_EFI=y
# CONFIG_SECCOMP is not set
CONFIG_CC_STACKPROTECTOR=y
CONFIG_COMPAT=y
CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
CONFIG_SYSVIPC_COMPAT=y
+CONFIG_KEYS_COMPAT=y
CONFIG_NET=y
CONFIG_COMPAT_NETLINK_MESSAGES=y
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
+CONFIG_IP_VS_PROTO_SCTP=y
#
# IPVS scheduler
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_DRR=m
+CONFIG_NET_SCH_MQPRIO=m
+CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_INGRESS=m
#
CONFIG_NET_CLS_IND=y
CONFIG_NET_SCH_FIFO=y
CONFIG_DCB=y
+CONFIG_NETPRIO_CGROUP=y
#
# Network testing
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEFAULT_PS_VALUE=1
# CONFIG_CFG80211_DEBUGFS is not set
-# CONFIG_WIRELESS_OLD_REGULATORY is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=m
CONFIG_LIB80211_CRYPT_TKIP=m
# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT="minstrel"
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
# CONFIG_MAC80211_MESH is not set
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUGFS is not set
CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_FD=m
# CONFIG_PARIDE is not set
+CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
# CONFIG_BLK_CPQ_DA is not set
CONFIG_BLK_CPQ_CISS_DA=m
CONFIG_CISS_SCSI_TAPE=y
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
-# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_SRP_TGT_ATTRS=y
CONFIG_SCSI_LOWLEVEL=y
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_SRP=m
CONFIG_SCSI_BFA_FC=m
+CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
# CONFIG_PCMCIA_FDOMAIN is not set
# CONFIG_PCMCIA_QLOGIC is not set
CONFIG_MD_FAULTY=m
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
+CONFIG_DM_BUFIO=m
+CONFIG_DM_PERSISTENT_DATA=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_THIN_PROVISIONING=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
+# CONFIG_DM_DEBUG_SPACE_MAPS is not set
CONFIG_DM_MIRROR=m
CONFIG_DM_RAID=m
CONFIG_DM_LOG_USERSPACE=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_ATL1E=m
CONFIG_ATL1C=m
CONFIG_JME=m
+CONFIG_PCH_GBE=m
CONFIG_NETDEV_10000=y
CONFIG_MDIO=m
CONFIG_CHELSIO_T1=m
CONFIG_P54_PCI=m
CONFIG_P54_LEDS=y
CONFIG_ATH_COMMON=m
+# CONFIG_ATH_DEBUG is not set
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
+# CONFIG_ATH5K_TRACER is not set
+CONFIG_ATH5K_PCI=y
+CONFIG_ATH9K_HW=m
+CONFIG_ATH9K_COMMON=m
CONFIG_ATH9K=m
-# CONFIG_ATH9K_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_IPW2100=m
CONFIG_IPW2100_MONITOR=y
# CONFIG_IPW2100_DEBUG is not set
-CONFIG_IPW2200=m
-CONFIG_IPW2200_MONITOR=y
-CONFIG_IPW2200_RADIOTAP=y
-CONFIG_IPW2200_PROMISCUOUS=y
-CONFIG_IPW2200_QOS=y
-# CONFIG_IPW2200_DEBUG is not set
CONFIG_LIBIPW=m
# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m
#
# CONFIG_IWLWIFI_DEBUG is not set
# CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_IWLAGN=m
-CONFIG_IWL4965=y
-CONFIG_IWL5000=y
+# CONFIG_IWLWIFI_DEVICE_SVTOOL is not set
+CONFIG_IWLWIFI_LEGACY=m
+
+#
+# Debugging Options
+#
+# CONFIG_IWLWIFI_LEGACY_DEBUG is not set
+# CONFIG_IWLWIFI_LEGACY_DEVICE_TRACING is not set
+CONFIG_IWL4965=m
CONFIG_IWL3945=m
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
CONFIG_HOSTAP_PCI=m
CONFIG_HOSTAP_CS=m
CONFIG_B43=m
+CONFIG_B43_SSB=y
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
CONFIG_B43_PCMCIA=y
CONFIG_B43_SDIO=y
CONFIG_B43_PIO=y
+# CONFIG_B43_PHY_N is not set
CONFIG_B43_PHY_LP=y
+# CONFIG_B43_PHY_HT is not set
CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
CONFIG_B43_DEBUG=y
-# CONFIG_B43_FORCE_PIO is not set
CONFIG_B43LEGACY=m
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
+# CONFIG_RT2800PCI is not set
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
# CONFIG_RT2800USB is not set
CONFIG_PCI_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_WL12XX=m
CONFIG_WL1251=m
CONFIG_WL1251_SDIO=m
+CONFIG_WL12XX_MENU=m
+CONFIG_WL12XX=m
+# CONFIG_WL12XX_SDIO is not set
+CONFIG_WL12XX_PLATFORM_DATA=y
CONFIG_IWM=m
# CONFIG_IWM_DEBUG is not set
+# CONFIG_IWM_TRACING is not set
#
# WiMAX Wireless Broadband devices
CONFIG_RAW_DRIVER=y
CONFIG_MAX_RAW_DEVS=8192
CONFIG_HPET=y
-# CONFIG_HPET_MMAP is not set
+CONFIG_HPET_MMAP=y
CONFIG_HANGCHECK_TIMER=m
CONFIG_UV_MMTIMER=m
CONFIG_TCG_TPM=y
CONFIG_AGP_VIA=y
CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=64
-# CONFIG_VGA_SWITCHEROO is not set
+CONFIG_VGA_SWITCHEROO=y
CONFIG_DRM=m
CONFIG_DRM_KMS_HELPER=m
CONFIG_DRM_TTM=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_PCM_OSS is not set
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_HRTIMER=m
CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
+CONFIG_SND_KCTL_JACK=y
CONFIG_SND_DMA_SGBUF=y
CONFIG_SND_RAWMIDI_SEQ=m
-# CONFIG_SND_OPL3_LIB_SEQ is not set
+CONFIG_SND_OPL3_LIB_SEQ=m
# CONFIG_SND_OPL4_LIB_SEQ is not set
# CONFIG_SND_SBAWE_SEQ is not set
CONFIG_SND_EMU10K1_SEQ=m
CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
CONFIG_SND_VX_LIB=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_DRIVERS=y
CONFIG_SND_BT87X=m
# CONFIG_SND_BT87X_OVERCLOCK is not set
CONFIG_SND_CA0106=m
-# CONFIG_SND_CMIPCI is not set
+CONFIG_SND_CMIPCI=m
CONFIG_SND_OXYGEN_LIB=m
CONFIG_SND_OXYGEN=m
# CONFIG_SND_CS4281 is not set
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB_ARCH_HAS_XHCI=y
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_PCI=m
-CONFIG_MMC_RICOH_MMC=m
+CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_PLTFM=m
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_AT91 is not set
CONFIG_PNFS_FILE_LAYOUT=m
CONFIG_NFS_FSCACHE=y
CONFIG_NFS_USE_LEGACY_DNS=y
-# CONFIG_NFS_USE_NEW_IDMAPPER is not set
CONFIG_NFSD=m
CONFIG_NFSD_DEPRECATED=y
CONFIG_NFSD_V2_ACL=y
CONFIG_BUILD_DOCSRC=y
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_DMA_API_DEBUG is not set
+CONFIG_ASYNC_RAID6_TEST=m
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_CHECK_SIGNATURE=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_NLATTR=y
+CONFIG_AVERAGE=y
* Check whether this bio extends beyond the end of the device.
*/
@@ -1517,6 +1519,12 @@ static inline void __generic_make_reques
- if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
- goto end_io;
+ goto end_io;
+ }
+ /* this is cfs's dev_rdonly check */
+ if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
victim = bdev->bd_contains;
bdev->bd_contains = NULL;
+ dev_clear_rdonly(bdev);
- }
- unlock_kernel();
- mutex_unlock(&bdev->bd_mutex);
+
+ put_disk(disk);
+ module_put(owner);
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
bi->bi_phys_segments++;
+ if (bio_rw_flagged(bi, BIO_RW_SYNCIO) && !forwrite)
+ clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags); /* force to read from disk. */
- spin_unlock_irq(&conf->device_lock);
- spin_unlock(&sh->lock);
+ if (forwrite) {
+ /* check if page is covered */
@@ -4132,6 +4134,9 @@ static int make_request(mddev_t *mddev,
bio_endio(bi, 0);
}
lnxmaj="2.6.32"
-lnxrel="220.17.1.el6"
+lnxrel="279.2.1.el6"
KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm
SERIES=2.6-rhel6.series
SUPPORTED KERNELS:
2.6-rhel5 RHEL5: 2.6.18-238.19.1.el5
-2.6-rhel6 RHEL6: 2.6.32-220.17.1.el6
+2.6-rhel6 RHEL6: 2.6.32-279.2.1.el6
CLIENT SUPPORT FOR UNPATCHED KERNELS:
2.6.18-238.19.1.el5 (RHEL5)
- 2.6.32-220.17.1.el6 (RHEL6)
+ 2.6.32-279.2.1.el6 (RHEL6)
2.6.16.60-0.69.1 (SLES10)
2.6.27.19-5 (SLES11)
it->oie_file.f_pos = 0;
it->oie_file.f_dentry = obj_dentry;
if (attr & LUDA_64BITHASH)
- it->oie_file.f_flags = O_64BITHASH;
+ it->oie_file.f_mode |= FMODE_64BITHASH;
else
- it->oie_file.f_flags = O_32BITHASH;
+ it->oie_file.f_mode |= FMODE_32BITHASH;
it->oie_file.f_mapping = obj->oo_inode->i_mapping;
it->oie_file.f_op = obj->oo_inode->i_fop;
it->oie_file.private_data = NULL;
it->oie_it_dirent++;
RETURN(0);
} else {
- if (it->oie_file.f_pos == LDISKFS_HTREE_EOF)
+ if (it->oie_file.f_pos == ldiskfs_get_htree_eof(&it->oie_file))
rc = +1;
else
rc = osd_ldiskfs_it_fill(env, di);
int osd_acct_obj_lookup(struct osd_thread_info *info, struct osd_device *osd,
const struct lu_fid *fid, struct osd_inode_id *id);
+/* copy from fs/ext4/dir.c */
+static inline int is_32bit_api(void)
+{
+#ifdef CONFIG_COMPAT
+ return is_compat_task();
+#else
+ return (BITS_PER_LONG == 32);
+#endif
+}
+
+static inline loff_t ldiskfs_get_htree_eof(struct file *filp)
+{
+ if ((filp->f_mode & FMODE_32BITHASH) ||
+ (!(filp->f_mode & FMODE_64BITHASH) && is_32bit_api()))
+ return LDISKFS_HTREE_EOF_32BIT;
+ else
+ return LDISKFS_HTREE_EOF_64BIT;
+}
+
#endif /* __KERNEL__ */
#endif /* _OSD_INTERNAL_H */