From: James Simmons Date: Wed, 9 May 2012 15:02:39 +0000 (-0400) Subject: LU-1374 kernel: Kernel update [RHEL5.8 2.6.18-308.4.1.el5] X-Git-Tag: 2.1.2-RC1~16 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=e9daba96e0a6bbe898b3d6207b2fe4bdd3293181;p=fs%2Flustre-release.git LU-1374 kernel: Kernel update [RHEL5.8 2.6.18-308.4.1.el5] Update RHEL5.8 kernel to 2.6.18-308.4.1.el5. Signed-off-by: James Simmons Change-Id: I1025558c97b1d6887d52020857a997cdc495d865 Reviewed-on: http://review.whamcloud.com/2684 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Bobi Jam Reviewed-by: Oleg Drokin --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index ef97179..0f891c5 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -1,11 +1,11 @@ 04-23-2011 Whamcloud, Inc. * version 2.1.2 * Server support for kernels: - 2.6.18-274.18.1.el5 (RHEL5) + 2.6.18-308.4.1.el5 (RHEL5) 2.6.32-220.13.1.el6 (RHEL6) * Client support for unpatched kernels: (see http://wiki.lustre.org/index.php?title=Patchless_Client) - 2.6.18-274.18.1.el5 (RHEL5) + 2.6.18-308.4.1.el5 (RHEL5) 2.6.32-220.13.1.el6 (RHEL6) 2.6.29.4-167.fc11 (FC11) 2.6.16.60-0.69.1 (SLES10) @@ -18,6 +18,10 @@ mounted with "32bitapi" mount option Severity : enhancement +Jira : LU-1374 +Description: Kernel update [RHEL5.8 2.6.18-308.4.1.el5] + +Severity : enhancement Jira : LU-1358 Description: Kernel update [RHEL6.2 2.6.32-220.13.1] diff --git a/lustre/kernel_patches/patches/fix-forever-in-do_get_write_access.patch b/lustre/kernel_patches/patches/fix-forever-in-do_get_write_access.patch deleted file mode 100644 index 57d12ee..0000000 --- a/lustre/kernel_patches/patches/fix-forever-in-do_get_write_access.patch +++ /dev/null @@ -1,41 +0,0 @@ -commit 229309caebe4508d650bb6d8f7d51f2b116f5bbd -Author: Jan Kara -Date: Sun May 8 19:09:53 2011 -0400 - -jbd2: Fix forever sleeping process in do_get_write_access() - -In do_get_write_access() we wait on BH_Unshadow bit for buffer to get -from shadow state. The waking code in journal_commit_transaction() has -a bug because it does not issue a memory barrier after the buffer is -moved from the shadow state and before wake_up_bit() is called. Thus a -waitqueue check can happen before the buffer is actually moved from -the shadow state and waiting process may never be woken. Fix the -problem by issuing proper barrier. - -Reported-by: Tao Ma -Signed-off-by: Jan Kara -Signed-off-by: "Theodore Ts'o" ---- - fs/jbd2/commit.c | 9 +++++++-- - 1 files changed, 7 insertions(+), 2 deletions(-) - -Index: linux-2.6.18.4/fs/jbd2/commit.c -=================================================================== ---- linux-2.6.18.4.orig/fs/jbd2/commit.c -+++ linux-2.6.18.4/fs/jbd2/commit.c -@@ -788,8 +788,13 @@ wait_for_iobuf: - required. */ - JBUFFER_TRACE(jh, "file as BJ_Forget"); - jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget); -- /* Wake up any transactions which were waiting for this -- IO to complete */ -+ /* -+ * Wake up any transactions which were waiting for this IO to -+ * complete. The barrier must be here so that changes by -+ * jbd2_journal_file_buffer() take effect before wake_up_bit() -+ * does the waitqueue check. -+ */ -+ smp_mb(); - wake_up_bit(&bh->b_state, BH_Unshadow); - JBUFFER_TRACE(jh, "brelse shadowed buffer"); - __brelse(bh); diff --git a/lustre/kernel_patches/patches/jbd-journal-chksum-2.6.18-vanilla.patch b/lustre/kernel_patches/patches/jbd-journal-chksum-2.6.18-vanilla.patch index 5f26c0b..ad81124 100644 --- a/lustre/kernel_patches/patches/jbd-journal-chksum-2.6.18-vanilla.patch +++ b/lustre/kernel_patches/patches/jbd-journal-chksum-2.6.18-vanilla.patch @@ -1,7 +1,7 @@ -Index: linux-2.6.18-128.1.6/fs/jbd/commit.c +Index: linux-2.6.18-164.6.1/fs/jbd/commit.c =================================================================== ---- linux-2.6.18-128.1.6.orig/fs/jbd/commit.c 2009-06-02 23:24:00.000000000 -0600 -+++ linux-2.6.18-128.1.6/fs/jbd/commit.c 2009-06-02 23:26:07.000000000 -0600 +--- linux-2.6.18-164.6.1.orig/fs/jbd/commit.c ++++ linux-2.6.18-164.6.1/fs/jbd/commit.c @@ -22,6 +22,7 @@ #include #include @@ -10,7 +10,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c /* -@@ -95,19 +96,23 @@ +@@ -108,19 +109,23 @@ static int inverted_lock(journal_t *jour return 1; } @@ -38,7 +38,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c int barrier_done = 0; if (is_journal_aborted(journal)) -@@ -119,21 +124,34 @@ +@@ -132,21 +137,34 @@ static int journal_write_commit_record(j bh = jh2bh(descriptor); @@ -82,7 +82,11 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c /* is it possible for another commit to fail at roughly * the same time as this one? If so, we don't want to * trust the barrier flag in the super, but instead want -@@ -154,12 +172,70 @@ +@@ -164,15 +182,76 @@ static int journal_write_commit_record(j + spin_unlock(&journal->j_state_lock); + + /* And try again, without the barrier */ ++ lock_buffer(bh); clear_buffer_ordered(bh); set_buffer_uptodate(bh); set_buffer_dirty(bh); @@ -94,7 +98,8 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c + *cbh = bh; + return ret; +} -+ + +- return (ret == -EIO); +/* + * This function along with journal_submit_commit_record + * allows to write the commit record asynchronously. @@ -122,8 +127,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c +{ + int ret = 0; + struct journal_head *jh; - -- return (ret == -EIO); ++ + while (commit_transaction->t_locked_list) { + struct buffer_head *bh; + @@ -133,16 +137,18 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c + if (buffer_locked(bh)) { + spin_unlock(&journal->j_list_lock); + wait_on_buffer(bh); -+ if (unlikely(!buffer_uptodate(bh))) -+ ret = -EIO; + spin_lock(&journal->j_list_lock); + } ++ if (unlikely(!buffer_uptodate(bh))) ++ ret = -EIO; + if (!inverted_lock(journal, bh)) { + put_bh(bh); + spin_lock(&journal->j_list_lock); + continue; + } -+ if (buffer_jbd(bh) && jh->b_jlist == BJ_Locked) { ++ if (buffer_jbd(bh) && bh2jh(bh) == jh && ++ jh->b_transaction == commit_transaction && ++ jh->b_jlist == BJ_Locked) { + __journal_unfile_buffer(jh); + jbd_unlock_bh_state(bh); + journal_remove_journal_head(bh); @@ -150,14 +156,14 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c + } else { + jbd_unlock_bh_state(bh); + } -+ put_bh(bh); ++ release_data_buffer(bh); + cond_resched_lock(&journal->j_list_lock); + } + return ret; } void journal_do_submit_data(struct buffer_head **wbuf, int bufs) -@@ -282,6 +358,20 @@ +@@ -295,6 +372,20 @@ write_out_data: return err; } @@ -178,7 +184,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c /* * journal_commit_transaction * -@@ -305,6 +395,8 @@ +@@ -318,6 +409,8 @@ void journal_commit_transaction(journal_ int first_tag = 0; int tag_flag; int i; @@ -187,7 +193,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c /* * First job: lock down the current transaction and wait for -@@ -431,39 +523,14 @@ +@@ -446,41 +537,14 @@ void journal_commit_transaction(journal_ err = journal_submit_data_buffers(journal, commit_transaction); /* @@ -215,7 +221,9 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c - spin_lock(&journal->j_list_lock); - continue; - } -- if (buffer_jbd(bh) && jh->b_jlist == BJ_Locked) { +- if (buffer_jbd(bh) && bh2jh(bh) == jh && +- jh->b_transaction == commit_transaction && +- jh->b_jlist == BJ_Locked) { - __journal_unfile_buffer(jh); - jbd_unlock_bh_state(bh); - journal_remove_journal_head(bh); @@ -233,7 +241,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c spin_unlock(&journal->j_list_lock); if (err) -@@ -642,6 +709,16 @@ +@@ -653,6 +721,16 @@ void journal_commit_transaction(journal_ start_journal_io: for (i = 0; i < bufs; i++) { struct buffer_head *bh = wbuf[i]; @@ -250,7 +258,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c lock_buffer(bh); clear_buffer_dirty(bh); set_buffer_uptodate(bh); -@@ -658,6 +735,23 @@ +@@ -669,6 +747,23 @@ start_journal_io: } } @@ -274,7 +282,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c /* Lo and behold: we have just managed to send a transaction to the log. Before we can commit it, wait for the IO so far to complete. Control buffers being written are on the -@@ -759,9 +853,15 @@ +@@ -770,9 +865,15 @@ wait_for_iobuf: journal_abort(journal, err); jbd_debug(3, "JBD: commit phase 6\n"); @@ -293,10 +301,73 @@ Index: linux-2.6.18-128.1.6/fs/jbd/commit.c if (err) journal_abort(journal, err); -Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c +Index: linux-2.6.18-164.6.1/include/linux/jbd.h =================================================================== ---- linux-2.6.18-128.1.6.orig/fs/jbd/recovery.c 2009-04-14 21:05:39.000000000 -0600 -+++ linux-2.6.18-128.1.6/fs/jbd/recovery.c 2009-06-02 23:26:07.000000000 -0600 +--- linux-2.6.18-164.6.1.orig/include/linux/jbd.h ++++ linux-2.6.18-164.6.1/include/linux/jbd.h +@@ -148,6 +148,29 @@ typedef struct journal_header_s + __be32 h_sequence; + } journal_header_t; + ++/* ++ * Checksum types. ++ */ ++#define JFS_CRC32_CHKSUM 1 ++#define JFS_MD5_CHKSUM 2 ++#define JFS_SHA1_CHKSUM 3 ++ ++#define JFS_CRC32_CHKSUM_SIZE 4 ++ ++#define JFS_CHECKSUM_BYTES (32 / sizeof(u32)) ++/* ++ * Commit block header for storing transactional checksums: ++ */ ++struct commit_header ++{ ++ __be32 h_magic; ++ __be32 h_blocktype; ++ __be32 h_sequence; ++ unsigned char h_chksum_type; ++ unsigned char h_chksum_size; ++ unsigned char h_padding[2]; ++ __be32 h_chksum[JFS_CHECKSUM_BYTES]; ++}; + + /* + * The block tag: used to describe a single buffer in the journal +@@ -234,12 +257,16 @@ typedef struct journal_superblock_s + ((j)->j_format_version >= 2 && \ + ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) + +-#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 ++#define JFS_FEATURE_COMPAT_CHECKSUM 0x00000001 ++ ++#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 ++#define JFS_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 + + /* Features known to this kernel version: */ +-#define JFS_KNOWN_COMPAT_FEATURES 0 ++#define JFS_KNOWN_COMPAT_FEATURES JFS_FEATURE_COMPAT_CHECKSUM + #define JFS_KNOWN_ROCOMPAT_FEATURES 0 +-#define JFS_KNOWN_INCOMPAT_FEATURES JFS_FEATURE_INCOMPAT_REVOKE ++#define JFS_KNOWN_INCOMPAT_FEATURES (JFS_FEATURE_INCOMPAT_REVOKE | \ ++ JFS_FEATURE_INCOMPAT_ASYNC_COMMIT) + + #ifdef __KERNEL__ + +@@ -1053,6 +1080,8 @@ extern int journal_check_available_fe + (journal_t *, unsigned long, unsigned long, unsigned long); + extern int journal_set_features + (journal_t *, unsigned long, unsigned long, unsigned long); ++extern int journal_clear_features ++ (journal_t *, unsigned long, unsigned long, unsigned long); + extern int journal_create (journal_t *); + extern int journal_load (journal_t *journal); + #ifndef __GENKSYMS__ +Index: linux-2.6.18-164.6.1/fs/jbd/recovery.c +=================================================================== +--- linux-2.6.18-164.6.1.orig/fs/jbd/recovery.c ++++ linux-2.6.18-164.6.1/fs/jbd/recovery.c @@ -21,6 +21,7 @@ #include #include @@ -305,7 +376,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c #endif /* -@@ -310,6 +311,38 @@ +@@ -310,6 +311,38 @@ int journal_skip_recovery(journal_t *jou return err; } @@ -344,7 +415,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c static int do_one_pass(journal_t *journal, struct recovery_info *info, enum passtype pass) { -@@ -321,6 +354,7 @@ +@@ -321,6 +354,7 @@ static int do_one_pass(journal_t *journa struct buffer_head * bh; unsigned int sequence; int blocktype; @@ -352,7 +423,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c /* Precompute the maximum metadata descriptors in a descriptor block */ int MAX_BLOCKS_PER_DESC; -@@ -412,9 +446,24 @@ +@@ -412,9 +446,24 @@ static int do_one_pass(journal_t *journa switch(blocktype) { case JFS_DESCRIPTOR_BLOCK: /* If it is a valid descriptor block, replay it @@ -379,7 +450,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c next_log_block += count_tags(bh, journal->j_blocksize); wrap(journal, next_log_block); -@@ -509,9 +558,97 @@ +@@ -509,9 +558,97 @@ static int do_one_pass(journal_t *journa continue; case JFS_COMMIT_BLOCK: @@ -479,7 +550,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c brelse(bh); next_commit_ID++; continue; -@@ -547,9 +684,10 @@ +@@ -547,9 +684,10 @@ static int do_one_pass(journal_t *journa * transaction marks the end of the valid log. */ @@ -493,11 +564,11 @@ Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c /* It's really bad news if different passes end up at * different places (but possible due to IO errors). */ if (info->end_transaction != next_commit_ID) { -Index: linux-2.6.18-128.1.6/fs/jbd/journal.c +Index: linux-2.6.18-164.6.1/fs/jbd/journal.c =================================================================== ---- linux-2.6.18-128.1.6.orig/fs/jbd/journal.c 2009-06-02 23:24:00.000000000 -0600 -+++ linux-2.6.18-128.1.6/fs/jbd/journal.c 2009-06-02 23:26:07.000000000 -0600 -@@ -67,6 +67,7 @@ +--- linux-2.6.18-164.6.1.orig/fs/jbd/journal.c ++++ linux-2.6.18-164.6.1/fs/jbd/journal.c +@@ -67,6 +67,7 @@ EXPORT_SYMBOL(journal_update_format); EXPORT_SYMBOL(journal_check_used_features); EXPORT_SYMBOL(journal_check_available_features); EXPORT_SYMBOL(journal_set_features); @@ -505,7 +576,7 @@ Index: linux-2.6.18-128.1.6/fs/jbd/journal.c EXPORT_SYMBOL(journal_create); EXPORT_SYMBOL(journal_load); EXPORT_SYMBOL(journal_destroy); -@@ -1583,6 +1584,33 @@ +@@ -1583,6 +1584,33 @@ int journal_set_features (journal_t *jou return 1; } @@ -539,11 +610,11 @@ Index: linux-2.6.18-128.1.6/fs/jbd/journal.c /** * int journal_update_format () - Update on-disk journal structure. -Index: linux-2.6.18-128.1.6/fs/Kconfig +Index: linux-2.6.18-164.6.1/fs/Kconfig =================================================================== ---- linux-2.6.18-128.1.6.orig/fs/Kconfig 2009-04-14 21:05:39.000000000 -0600 -+++ linux-2.6.18-128.1.6/fs/Kconfig 2009-06-02 23:26:07.000000000 -0600 -@@ -206,6 +206,7 @@ +--- linux-2.6.18-164.6.1.orig/fs/Kconfig ++++ linux-2.6.18-164.6.1/fs/Kconfig +@@ -142,6 +142,7 @@ source "fs/ext4/Kconfig" config JBD tristate @@ -551,74 +622,11 @@ Index: linux-2.6.18-128.1.6/fs/Kconfig help This is a generic journaling layer for block devices. It is currently used by the ext3 and OCFS2 file systems, but it could -Index: linux-2.6.18-128.1.6/include/linux/jbd.h -=================================================================== ---- linux-2.6.18-128.1.6.orig/include/linux/jbd.h 2009-06-02 23:24:00.000000000 -0600 -+++ linux-2.6.18-128.1.6/include/linux/jbd.h 2009-06-02 23:26:07.000000000 -0600 -@@ -148,6 +148,29 @@ - __be32 h_sequence; - } journal_header_t; - -+/* -+ * Checksum types. -+ */ -+#define JFS_CRC32_CHKSUM 1 -+#define JFS_MD5_CHKSUM 2 -+#define JFS_SHA1_CHKSUM 3 -+ -+#define JFS_CRC32_CHKSUM_SIZE 4 -+ -+#define JFS_CHECKSUM_BYTES (32 / sizeof(u32)) -+/* -+ * Commit block header for storing transactional checksums: -+ */ -+struct commit_header -+{ -+ __be32 h_magic; -+ __be32 h_blocktype; -+ __be32 h_sequence; -+ unsigned char h_chksum_type; -+ unsigned char h_chksum_size; -+ unsigned char h_padding[2]; -+ __be32 h_chksum[JFS_CHECKSUM_BYTES]; -+}; - - /* - * The block tag: used to describe a single buffer in the journal -@@ -234,12 +257,16 @@ - ((j)->j_format_version >= 2 && \ - ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask)))) - --#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 -+#define JFS_FEATURE_COMPAT_CHECKSUM 0x00000001 -+ -+#define JFS_FEATURE_INCOMPAT_REVOKE 0x00000001 -+#define JFS_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004 - - /* Features known to this kernel version: */ --#define JFS_KNOWN_COMPAT_FEATURES 0 -+#define JFS_KNOWN_COMPAT_FEATURES JFS_FEATURE_COMPAT_CHECKSUM - #define JFS_KNOWN_ROCOMPAT_FEATURES 0 --#define JFS_KNOWN_INCOMPAT_FEATURES JFS_FEATURE_INCOMPAT_REVOKE -+#define JFS_KNOWN_INCOMPAT_FEATURES (JFS_FEATURE_INCOMPAT_REVOKE | \ -+ JFS_FEATURE_INCOMPAT_ASYNC_COMMIT) - - #ifdef __KERNEL__ - -@@ -1053,6 +1080,8 @@ - (journal_t *, unsigned long, unsigned long, unsigned long); - extern int journal_set_features - (journal_t *, unsigned long, unsigned long, unsigned long); -+extern int journal_clear_features -+ (journal_t *, unsigned long, unsigned long, unsigned long); - extern int journal_create (journal_t *); - extern int journal_load (journal_t *journal); - #ifndef __GENKSYMS__ -Index: linux-2.6.18-128.1.6/Documentation/filesystems/ext3.txt +Index: linux-2.6.18-164.6.1/Documentation/filesystems/ext3.txt =================================================================== ---- linux-2.6.18-128.1.6.orig/Documentation/filesystems/ext3.txt 2006-09-19 21:42:06.000000000 -0600 -+++ linux-2.6.18-128.1.6/Documentation/filesystems/ext3.txt 2009-06-02 23:26:07.000000000 -0600 -@@ -14,6 +14,16 @@ +--- linux-2.6.18-164.6.1.orig/Documentation/filesystems/ext3.txt ++++ linux-2.6.18-164.6.1/Documentation/filesystems/ext3.txt +@@ -14,6 +14,16 @@ Options When mounting an ext3 filesystem, the following option are accepted: (*) == default diff --git a/lustre/kernel_patches/patches/md-avoid-bug_on-when-bmc-overflow.patch b/lustre/kernel_patches/patches/md-avoid-bug_on-when-bmc-overflow.patch deleted file mode 100644 index f64557e..0000000 --- a/lustre/kernel_patches/patches/md-avoid-bug_on-when-bmc-overflow.patch +++ /dev/null @@ -1,64 +0,0 @@ -diff .prev/drivers/md/bitmap.c ./drivers/md/bitmap.c ---- .prev/drivers/md/bitmap.c 2007-02-07 13:03:56.000000000 +1100 -+++ ./drivers/md/bitmap.c 2007-02-07 21:34:47.000000000 +1100 -@@ -1160,6 +1160,22 @@ int bitmap_startwrite(struct bitmap *bit - return 0; - } - -+ if (unlikely((*bmc & COUNTER_MAX) == COUNTER_MAX)) { -+ DEFINE_WAIT(__wait); -+ /* note that it is safe to do the prepare_to_wait -+ * after the test as long as we do it before dropping -+ * the spinlock. -+ */ -+ prepare_to_wait(&bitmap->overflow_wait, &__wait, -+ TASK_UNINTERRUPTIBLE); -+ spin_unlock_irq(&bitmap->lock); -+ bitmap->mddev->queue -+ ->unplug_fn(bitmap->mddev->queue); -+ schedule(); -+ finish_wait(&bitmap->overflow_wait, &__wait); -+ continue; -+ } -+ - switch(*bmc) { - case 0: - bitmap_file_set_bit(bitmap, offset); -@@ -1169,7 +1185,7 @@ int bitmap_startwrite(struct bitmap *bit - case 1: - *bmc = 2; - } -- BUG_ON((*bmc & COUNTER_MAX) == COUNTER_MAX); -+ - (*bmc)++; - - spin_unlock_irq(&bitmap->lock); -@@ -1207,6 +1223,9 @@ void bitmap_endwrite(struct bitmap *bitm - if (!success && ! (*bmc & NEEDED_MASK)) - *bmc |= NEEDED_MASK; - -+ if ((*bmc & COUNTER_MAX) == COUNTER_MAX) -+ wake_up(&bitmap->overflow_wait); -+ - (*bmc)--; - if (*bmc <= 2) { - set_page_attr(bitmap, -@@ -1431,6 +1450,7 @@ int bitmap_create(mddev_t *mddev) - spin_lock_init(&bitmap->lock); - atomic_set(&bitmap->pending_writes, 0); - init_waitqueue_head(&bitmap->write_wait); -+ init_waitqueue_head(&bitmap->overflow_wait); - - bitmap->mddev = mddev; - -diff .prev/include/linux/raid/bitmap.h ./include/linux/raid/bitmap.h ---- .prev/include/linux/raid/bitmap.h 2007-02-07 13:03:56.000000000 +1100 -+++ ./include/linux/raid/bitmap.h 2007-02-07 20:57:57.000000000 +1100 -@@ -247,6 +247,7 @@ struct bitmap { - - atomic_t pending_writes; /* pending writes to the bitmap file */ - wait_queue_head_t write_wait; -+ wait_queue_head_t overflow_wait; - - }; - diff --git a/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch b/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch index 71bcc09..7c95d56 100644 --- a/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch +++ b/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch @@ -1,7 +1,7 @@ -Index: linux-2.6.18-128.1.6/drivers/md/raid5.c +Index: linux-2.6.18-128.1.14/drivers/md/raid5.c =================================================================== ---- linux-2.6.18-128.1.6.orig/drivers/md/raid5.c 2009-06-02 23:24:52.000000000 -0600 -+++ linux-2.6.18-128.1.6/drivers/md/raid5.c 2009-06-02 23:24:55.000000000 -0600 +--- linux-2.6.18-128.1.14.orig/drivers/md/raid5.c 2009-06-19 12:34:46.000000000 -0600 ++++ linux-2.6.18-128.1.14/drivers/md/raid5.c 2009-06-19 12:34:50.000000000 -0600 @@ -633,6 +633,9 @@ clear_buffer_uptodate(bh); } @@ -322,7 +322,7 @@ Index: linux-2.6.18-128.1.6/drivers/md/raid5.c clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); } -@@ -3451,6 +3595,9 @@ +@@ -3449,6 +3593,9 @@ mddev->queue->max_phys_segments = conf->chunk_size * conf->previous_raid_disks >> PAGE_SHIFT; mddev->queue->max_hw_segments = conf->chunk_size * conf->previous_raid_disks >> PAGE_SHIFT;; @@ -332,7 +332,7 @@ Index: linux-2.6.18-128.1.6/drivers/md/raid5.c return 0; abort: if (conf) { -@@ -3537,9 +3684,11 @@ +@@ -3535,9 +3682,11 @@ atomic_read(&conf->handled_in_raid5d), atomic_read(&conf->out_of_stripes), atomic_read(&conf->handle_called)); @@ -346,10 +346,10 @@ Index: linux-2.6.18-128.1.6/drivers/md/raid5.c seq_printf (seq, "\n\t\t%u delayed, %u bit delayed, %u active, queues: %u in, %u out\n", atomic_read(&conf->delayed), atomic_read(&conf->bit_delayed), atomic_read(&conf->active_stripes), -Index: linux-2.6.18-128.1.6/include/linux/backing-dev.h +Index: linux-2.6.18-128.1.14/include/linux/backing-dev.h =================================================================== ---- linux-2.6.18-128.1.6.orig/include/linux/backing-dev.h 2006-09-19 21:42:06.000000000 -0600 -+++ linux-2.6.18-128.1.6/include/linux/backing-dev.h 2009-06-02 23:24:55.000000000 -0600 +--- linux-2.6.18-128.1.14.orig/include/linux/backing-dev.h 2009-06-19 12:33:11.000000000 -0600 ++++ linux-2.6.18-128.1.14/include/linux/backing-dev.h 2009-06-19 12:34:50.000000000 -0600 @@ -48,6 +48,7 @@ #define BDI_CAP_THROTTLE_DIRTY 0x00010000 /* throttle in balance_dirty_pages when BDI is congested */ #define BDI_CAP_VMFLAGS \ @@ -370,11 +370,11 @@ Index: linux-2.6.18-128.1.6/include/linux/backing-dev.h + #endif /* _LINUX_BACKING_DEV_H */ -Index: linux-2.6.18-128.1.6/include/linux/page-flags.h +Index: linux-2.6.18-128.1.14/include/linux/page-flags.h =================================================================== ---- linux-2.6.18-128.1.6.orig/include/linux/page-flags.h 2009-04-14 21:05:24.000000000 -0600 -+++ linux-2.6.18-128.1.6/include/linux/page-flags.h 2009-06-02 23:24:55.000000000 -0600 -@@ -86,6 +86,7 @@ +--- linux-2.6.18-128.1.14.orig/include/linux/page-flags.h 2009-06-19 12:33:11.000000000 -0600 ++++ linux-2.6.18-128.1.14/include/linux/page-flags.h 2009-06-19 12:34:50.000000000 -0600 +@@ -87,6 +87,7 @@ #define PG_reclaim 17 /* To be reclaimed asap */ #define PG_nosave_free 18 /* Free, should not be written */ #define PG_buddy 19 /* Page is free, on buddy lists */ @@ -382,7 +382,7 @@ Index: linux-2.6.18-128.1.6/include/linux/page-flags.h #define PG_xpmem 27 /* Testing for xpmem. */ /* PG_owner_priv_1 users should have descriptive aliases */ -@@ -283,6 +284,14 @@ +@@ -288,6 +289,14 @@ struct page; /* forward declaration */ @@ -397,10 +397,10 @@ Index: linux-2.6.18-128.1.6/include/linux/page-flags.h int test_clear_page_dirty(struct page *page); int test_clear_page_writeback(struct page *page); int test_set_page_writeback(struct page *page); -Index: linux-2.6.18-128.1.6/include/linux/raid/raid5.h +Index: linux-2.6.18-128.1.14/include/linux/raid/raid5.h =================================================================== ---- linux-2.6.18-128.1.6.orig/include/linux/raid/raid5.h 2009-06-02 23:24:50.000000000 -0600 -+++ linux-2.6.18-128.1.6/include/linux/raid/raid5.h 2009-06-02 23:24:55.000000000 -0600 +--- linux-2.6.18-128.1.14.orig/include/linux/raid/raid5.h 2009-06-19 12:34:42.000000000 -0600 ++++ linux-2.6.18-128.1.14/include/linux/raid/raid5.h 2009-06-19 12:34:50.000000000 -0600 @@ -156,8 +156,9 @@ #define R5_Overlap 7 /* There is a pending overlapping request on this block */ #define R5_ReadError 8 /* seen a read error here recently */ @@ -412,10 +412,10 @@ Index: linux-2.6.18-128.1.6/include/linux/raid/raid5.h /* * Write method */ -Index: linux-2.6.18-128.1.6/mm/filemap.c +Index: linux-2.6.18-128.1.14/mm/filemap.c =================================================================== ---- linux-2.6.18-128.1.6.orig/mm/filemap.c 2009-04-14 21:05:46.000000000 -0600 -+++ linux-2.6.18-128.1.6/mm/filemap.c 2009-06-02 23:24:55.000000000 -0600 +--- linux-2.6.18-128.1.14.orig/mm/filemap.c 2009-06-19 12:33:11.000000000 -0600 ++++ linux-2.6.18-128.1.14/mm/filemap.c 2009-06-19 12:34:50.000000000 -0600 @@ -30,6 +30,7 @@ #include #include @@ -425,9 +425,9 @@ Index: linux-2.6.18-128.1.6/mm/filemap.c #include #include "internal.h" @@ -567,11 +568,55 @@ - if (!test_clear_page_writeback(page)) - BUG(); - } + if (!test_clear_page_writeback(page)) + BUG(); + + clear_page_constant(page); smp_mb__after_clear_bit(); wake_up_page(page, PG_writeback); diff --git a/lustre/kernel_patches/series/2.6-rhel5.series b/lustre/kernel_patches/series/2.6-rhel5.series index 27b6708..f9efdf3 100644 --- a/lustre/kernel_patches/series/2.6-rhel5.series +++ b/lustre/kernel_patches/series/2.6-rhel5.series @@ -24,6 +24,4 @@ mpt-fusion-max-sge.patch prune-icache-use-trylock-rhel5.patch jbd2-jcberr-2.6-rhel5.patch jbd2-commit-timer-no-jiffies-rounding.diff -md-avoid-bug_on-when-bmc-overflow.patch lustre_iser_max_sectors_tuning_lustre2.0.patch -fix-forever-in-do_get_write_access.patch diff --git a/lustre/kernel_patches/targets/2.6-rhel5.target.in b/lustre/kernel_patches/targets/2.6-rhel5.target.in index ba0d0f8..be2f8f7 100644 --- a/lustre/kernel_patches/targets/2.6-rhel5.target.in +++ b/lustre/kernel_patches/targets/2.6-rhel5.target.in @@ -1,5 +1,5 @@ lnxmaj="2.6.18" -lnxrel="274.18.1.el5" +lnxrel="308.4.1.el5" KERNEL_SRPM=kernel-${lnxmaj}-${lnxrel}.src.rpm SERIES=2.6-rhel5.series diff --git a/lustre/kernel_patches/which_patch b/lustre/kernel_patches/which_patch index dad557f..5638b71 100644 --- a/lustre/kernel_patches/which_patch +++ b/lustre/kernel_patches/which_patch @@ -1,11 +1,11 @@ SERIES VERSION COMMENT SUPPORTED KERNELS: -2.6-rhel5 RHEL5: 2.6.18-274.18.1.el5 +2.6-rhel5 RHEL5: 2.6.18-308.4.1.el5 2.6-rhel6 RHEL6: 2.6.32-220.13.1.el6 CLIENT SUPPORT FOR UNPATCHED KERNELS: - 2.6.18-274.18.1.el5 (RHEL5) + 2.6.18-308.4.1.el5 (RHEL5) 2.6.32-220.13.1.el6 (RHEL6) 2.6.16.60-0.69.1 (SLES10) 2.6.27.19-5 (SLES11)