From: yangsheng Date: Wed, 3 Jun 2009 07:30:57 +0000 (+0000) Subject: b=19024 X-Git-Tag: v1_9_0_200~19 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=a87ee78419e42323e1e73f1bc99cb80c7361ede6 b=19024 i=shadow, bobijam Update kernel to RHEL5.3 2.6.18-128.1.6.el5. --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 57172c2..c820af3 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -2,7 +2,7 @@ tbd Sun Microsystems, Inc. * version 2.0.0 * Support for kernels: 2.6.16.60-0.37 (SLES 10), - 2.6.18-128.1.1.el5 (RHEL 5), + 2.6.18-128.1.6.el5 (RHEL 5), 2.6.22.14 vanilla (kernel.org). * Client support for unpatched kernels: (see http://wiki.lustre.org/index.php?title=Patchless_Client) @@ -14,6 +14,10 @@ tbd Sun Microsystems, Inc. * File join has been disabled in this release, refer to Bugzilla 16929. Severity : enhancement +Bugzilla : 19024 +Description: Update kernel to RHEL5.3 2.6.18-128.1.6.el5. + +Severity : enhancement Bugzilla : 19212 Description: Update kernel to SLES10 SP2 2.6.16.60-0.37. 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 3c20f0c..49ed3de 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.8/fs/jbd/commit.c +Index: linux-2.6.18-128.1.6/fs/jbd/commit.c =================================================================== ---- linux-2.6.18.8.orig/fs/jbd/commit.c -+++ linux-2.6.18.8/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 @@ -22,6 +22,7 @@ #include #include @@ -10,7 +10,7 @@ Index: linux-2.6.18.8/fs/jbd/commit.c /* -@@ -95,19 +96,23 @@ static int inverted_lock(journal_t *jour +@@ -95,19 +96,23 @@ return 1; } @@ -38,7 +38,7 @@ Index: linux-2.6.18.8/fs/jbd/commit.c int barrier_done = 0; if (is_journal_aborted(journal)) -@@ -119,21 +124,34 @@ static int journal_write_commit_record(j +@@ -119,21 +124,34 @@ bh = jh2bh(descriptor); @@ -82,7 +82,7 @@ Index: linux-2.6.18.8/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 +173,70 @@ static int journal_write_commit_record(j +@@ -154,12 +172,70 @@ clear_buffer_ordered(bh); set_buffer_uptodate(bh); set_buffer_dirty(bh); @@ -157,8 +157,8 @@ Index: linux-2.6.18.8/fs/jbd/commit.c } void journal_do_submit_data(struct buffer_head **wbuf, int bufs) -@@ -273,6 +350,20 @@ write_out_data: - journal_do_submit_data(wbuf, bufs); +@@ -282,6 +358,20 @@ + return err; } +static inline __u32 jbd_checksum_data(__u32 crc32_sum, struct buffer_head *bh) @@ -178,7 +178,7 @@ Index: linux-2.6.18.8/fs/jbd/commit.c /* * journal_commit_transaction * -@@ -296,6 +387,8 @@ void journal_commit_transaction(journal_ +@@ -305,6 +395,8 @@ int first_tag = 0; int tag_flag; int i; @@ -187,8 +187,8 @@ Index: linux-2.6.18.8/fs/jbd/commit.c /* * First job: lock down the current transaction and wait for -@@ -439,39 +532,14 @@ void journal_commit_transaction(journal_ - journal_submit_data_buffers(journal, commit_transaction); +@@ -431,39 +523,14 @@ + err = journal_submit_data_buffers(journal, commit_transaction); /* - * Wait for all previously submitted IO to complete. @@ -233,7 +233,7 @@ Index: linux-2.6.18.8/fs/jbd/commit.c spin_unlock(&journal->j_list_lock); if (err) -@@ -643,6 +712,16 @@ void journal_commit_transaction(journal_ +@@ -642,6 +709,16 @@ start_journal_io: for (i = 0; i < bufs; i++) { struct buffer_head *bh = wbuf[i]; @@ -250,7 +250,7 @@ Index: linux-2.6.18.8/fs/jbd/commit.c lock_buffer(bh); clear_buffer_dirty(bh); set_buffer_uptodate(bh); -@@ -659,6 +738,23 @@ start_journal_io: +@@ -658,6 +735,23 @@ } } @@ -274,8 +274,8 @@ Index: linux-2.6.18.8/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 -@@ -757,9 +853,15 @@ wait_for_iobuf: - } +@@ -759,9 +853,15 @@ + journal_abort(journal, err); jbd_debug(3, "JBD: commit phase 6\n"); - @@ -292,74 +292,11 @@ Index: linux-2.6.18.8/fs/jbd/commit.c + err = journal_wait_on_commit_record(cbh); if (err) - __journal_abort_hard(journal); -Index: linux-2.6.18.8/include/linux/jbd.h -=================================================================== ---- linux-2.6.18.8.orig/include/linux/jbd.h -+++ linux-2.6.18.8/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); - extern void journal_destroy (journal_t *); -Index: linux-2.6.18.8/fs/jbd/recovery.c + journal_abort(journal, err); +Index: linux-2.6.18-128.1.6/fs/jbd/recovery.c =================================================================== ---- linux-2.6.18.8.orig/fs/jbd/recovery.c -+++ linux-2.6.18.8/fs/jbd/recovery.c +--- 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 @@ -21,6 +21,7 @@ #include #include @@ -368,7 +305,7 @@ Index: linux-2.6.18.8/fs/jbd/recovery.c #endif /* -@@ -307,6 +308,38 @@ int journal_skip_recovery(journal_t *jou +@@ -310,6 +311,38 @@ return err; } @@ -407,7 +344,7 @@ Index: linux-2.6.18.8/fs/jbd/recovery.c static int do_one_pass(journal_t *journal, struct recovery_info *info, enum passtype pass) { -@@ -318,6 +351,7 @@ static int do_one_pass(journal_t *journa +@@ -321,6 +354,7 @@ struct buffer_head * bh; unsigned int sequence; int blocktype; @@ -415,7 +352,7 @@ Index: linux-2.6.18.8/fs/jbd/recovery.c /* Precompute the maximum metadata descriptors in a descriptor block */ int MAX_BLOCKS_PER_DESC; -@@ -409,9 +443,24 @@ static int do_one_pass(journal_t *journa +@@ -412,9 +446,24 @@ switch(blocktype) { case JFS_DESCRIPTOR_BLOCK: /* If it is a valid descriptor block, replay it @@ -442,7 +379,7 @@ Index: linux-2.6.18.8/fs/jbd/recovery.c next_log_block += count_tags(bh, journal->j_blocksize); wrap(journal, next_log_block); -@@ -506,9 +555,97 @@ static int do_one_pass(journal_t *journa +@@ -509,9 +558,97 @@ continue; case JFS_COMMIT_BLOCK: @@ -542,7 +479,7 @@ Index: linux-2.6.18.8/fs/jbd/recovery.c brelse(bh); next_commit_ID++; continue; -@@ -544,9 +681,10 @@ static int do_one_pass(journal_t *journa +@@ -547,9 +684,10 @@ * transaction marks the end of the valid log. */ @@ -556,11 +493,11 @@ Index: linux-2.6.18.8/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.8/fs/jbd/journal.c +Index: linux-2.6.18-128.1.6/fs/jbd/journal.c =================================================================== ---- linux-2.6.18.8.orig/fs/jbd/journal.c -+++ linux-2.6.18.8/fs/jbd/journal.c -@@ -67,6 +67,7 @@ EXPORT_SYMBOL(journal_update_format); +--- 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 @@ EXPORT_SYMBOL(journal_check_used_features); EXPORT_SYMBOL(journal_check_available_features); EXPORT_SYMBOL(journal_set_features); @@ -568,7 +505,7 @@ Index: linux-2.6.18.8/fs/jbd/journal.c EXPORT_SYMBOL(journal_create); EXPORT_SYMBOL(journal_load); EXPORT_SYMBOL(journal_destroy); -@@ -1573,6 +1574,33 @@ int journal_set_features (journal_t *jou +@@ -1583,6 +1584,33 @@ return 1; } @@ -602,11 +539,11 @@ Index: linux-2.6.18.8/fs/jbd/journal.c /** * int journal_update_format () - Update on-disk journal structure. -Index: linux-2.6.18.8/fs/Kconfig +Index: linux-2.6.18-128.1.6/fs/Kconfig =================================================================== ---- linux-2.6.18.8.orig/fs/Kconfig -+++ linux-2.6.18.8/fs/Kconfig -@@ -140,6 +140,7 @@ config EXT3_FS_SECURITY +--- 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 @@ config JBD tristate @@ -614,11 +551,74 @@ Index: linux-2.6.18.8/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.8/Documentation/filesystems/ext3.txt +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 =================================================================== ---- linux-2.6.18.8.orig/Documentation/filesystems/ext3.txt -+++ linux-2.6.18.8/Documentation/filesystems/ext3.txt -@@ -14,6 +14,16 @@ Options +--- 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 @@ When mounting an ext3 filesystem, the following option are accepted: (*) == default diff --git a/lustre/kernel_patches/patches/jbd-stats-2.6-rhel5.patch b/lustre/kernel_patches/patches/jbd-stats-2.6-rhel5.patch index c770722..67832a6 100644 --- a/lustre/kernel_patches/patches/jbd-stats-2.6-rhel5.patch +++ b/lustre/kernel_patches/patches/jbd-stats-2.6-rhel5.patch @@ -1,8 +1,8 @@ -Index: linux-2.6.18-8.1.8/include/linux/jbd.h +Index: linux-2.6.18-128.1.6/include/linux/jbd.h =================================================================== ---- linux-2.6.18-8.1.8.orig/include/linux/jbd.h 2007-08-28 22:22:10.000000000 +0200 -+++ linux-2.6.18-8.1.8/include/linux/jbd.h 2007-08-28 22:22:29.000000000 +0200 -@@ -455,6 +455,16 @@ struct handle_s +--- linux-2.6.18-128.1.6.orig/include/linux/jbd.h 2009-06-02 23:22:50.000000000 -0600 ++++ linux-2.6.18-128.1.6/include/linux/jbd.h 2009-06-02 23:24:00.000000000 -0600 +@@ -428,6 +428,16 @@ }; @@ -19,7 +19,7 @@ Index: linux-2.6.18-8.1.8/include/linux/jbd.h /* The transaction_t type is the guts of the journaling mechanism. It * tracks a compound transaction through its various states: * -@@ -592,6 +602,21 @@ struct transaction_s +@@ -565,6 +575,21 @@ spinlock_t t_handle_lock; /* @@ -41,7 +41,7 @@ Index: linux-2.6.18-8.1.8/include/linux/jbd.h * Number of outstanding updates running on this transaction * [t_handle_lock] */ -@@ -631,6 +656,57 @@ struct transaction_s +@@ -604,6 +629,57 @@ struct list_head t_jcb; }; @@ -99,7 +99,7 @@ Index: linux-2.6.18-8.1.8/include/linux/jbd.h /** * struct journal_s - The journal_s type is the concrete type associated with * journal_t. -@@ -884,6 +960,16 @@ struct journal_s +@@ -857,6 +933,16 @@ pid_t j_last_sync_writer; /* @@ -116,11 +116,11 @@ Index: linux-2.6.18-8.1.8/include/linux/jbd.h * An opaque pointer to fs-private information. ext3 puts its * superblock pointer here */ -Index: linux-2.6.18-8.1.8/fs/jbd/transaction.c +Index: linux-2.6.18-128.1.6/fs/jbd/transaction.c =================================================================== ---- linux-2.6.18-8.1.8.orig/fs/jbd/transaction.c 2007-08-28 22:22:10.000000000 +0200 -+++ linux-2.6.18-8.1.8/fs/jbd/transaction.c 2007-08-28 22:22:29.000000000 +0200 -@@ -60,6 +60,8 @@ get_transaction(journal_t *journal, tran +--- linux-2.6.18-128.1.6.orig/fs/jbd/transaction.c 2009-06-02 23:22:50.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/jbd/transaction.c 2009-06-02 23:24:00.000000000 -0600 +@@ -60,6 +60,8 @@ J_ASSERT(journal->j_running_transaction == NULL); journal->j_running_transaction = transaction; @@ -129,7 +129,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/transaction.c return transaction; } -@@ -86,6 +88,7 @@ static int start_this_handle(journal_t * +@@ -86,6 +88,7 @@ int nblocks = handle->h_buffer_credits; transaction_t *new_transaction = NULL; int ret = 0; @@ -137,7 +137,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/transaction.c if (nblocks > journal->j_max_transaction_buffers) { printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n", -@@ -219,6 +222,12 @@ repeat_locked: +@@ -219,6 +222,12 @@ /* OK, account for the buffers that this operation expects to * use and add the handle to the running transaction. */ @@ -150,10 +150,10 @@ Index: linux-2.6.18-8.1.8/fs/jbd/transaction.c handle->h_transaction = transaction; transaction->t_outstanding_credits += nblocks; transaction->t_updates++; -Index: linux-2.6.18-8.1.8/fs/jbd/journal.c +Index: linux-2.6.18-128.1.6/fs/jbd/journal.c =================================================================== ---- linux-2.6.18-8.1.8.orig/fs/jbd/journal.c 2007-08-28 22:22:10.000000000 +0200 -+++ linux-2.6.18-8.1.8/fs/jbd/journal.c 2007-08-28 22:22:29.000000000 +0200 +--- linux-2.6.18-128.1.6.orig/fs/jbd/journal.c 2009-06-02 23:23:03.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/jbd/journal.c 2009-06-02 23:24:00.000000000 -0600 @@ -36,6 +36,7 @@ #include #include @@ -162,7 +162,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c #include #include -@@ -639,6 +640,300 @@ struct journal_head *journal_get_descrip +@@ -638,6 +639,300 @@ return journal_add_journal_head(bh); } @@ -463,7 +463,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c /* * Management for journal control blocks: functions to create and * destroy journal_t structures, and to initialise and read existing -@@ -681,6 +976,9 @@ static journal_t * journal_init_common ( +@@ -680,6 +975,9 @@ kfree(journal); goto fail; } @@ -473,7 +473,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c return journal; fail: return NULL; -@@ -724,6 +1022,7 @@ journal_t * journal_init_dev(struct bloc +@@ -723,6 +1021,7 @@ journal->j_blk_offset = start; journal->j_maxlen = len; journal->j_blocksize = blocksize; @@ -481,7 +481,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c bh = __getblk(journal->j_dev, start, journal->j_blocksize); J_ASSERT(bh != NULL); -@@ -773,6 +1072,7 @@ journal_t * journal_init_inode (struct i +@@ -772,6 +1071,7 @@ journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits; journal->j_blocksize = inode->i_sb->s_blocksize; @@ -489,7 +489,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c /* journal descriptor can store up to n blocks -bzzz */ n = journal->j_blocksize / sizeof(journal_block_tag_t); -@@ -1161,6 +1461,8 @@ void journal_destroy(journal_t *journal) +@@ -1168,6 +1468,8 @@ brelse(journal->j_sb_buffer); } @@ -498,7 +498,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c if (journal->j_inode) iput(journal->j_inode); if (journal->j_revoke) -@@ -2027,6 +2329,28 @@ static void __exit remove_jbd_proc_entry +@@ -2015,6 +2317,28 @@ #endif @@ -527,7 +527,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c kmem_cache_t *jbd_handle_cache; static int __init journal_init_handle_cache(void) -@@ -2090,6 +2414,7 @@ static int __init journal_init(void) +@@ -2078,6 +2402,7 @@ if (ret != 0) journal_destroy_caches(); create_jbd_proc_entry(); @@ -535,7 +535,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c return ret; } -@@ -2101,6 +2426,7 @@ static void __exit journal_exit(void) +@@ -2089,6 +2414,7 @@ printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n); #endif remove_jbd_proc_entry(); @@ -543,11 +543,11 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c journal_destroy_caches(); } -Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c +Index: linux-2.6.18-128.1.6/fs/jbd/checkpoint.c =================================================================== ---- linux-2.6.18-8.1.8.orig/fs/jbd/checkpoint.c 2007-08-28 22:22:10.000000000 +0200 -+++ linux-2.6.18-8.1.8/fs/jbd/checkpoint.c 2007-08-28 22:23:23.000000000 +0200 -@@ -231,7 +231,7 @@ __flush_batch(journal_t *journal, struct +--- linux-2.6.18-128.1.6.orig/fs/jbd/checkpoint.c 2009-06-02 23:22:50.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/jbd/checkpoint.c 2009-06-02 23:24:00.000000000 -0600 +@@ -242,7 +242,7 @@ * Called under jbd_lock_bh_state(jh2bh(jh)), and drops it */ static int __process_buffer(journal_t *journal, struct journal_head *jh, @@ -556,7 +556,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c { struct buffer_head *bh = jh2bh(jh); int ret = 0; -@@ -249,6 +249,7 @@ static int __process_buffer(journal_t *j +@@ -260,6 +260,7 @@ transaction_t *t = jh->b_transaction; tid_t tid = t->t_tid; @@ -564,7 +564,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c spin_unlock(&journal->j_list_lock); jbd_unlock_bh_state(bh); log_start_commit(journal, tid); -@@ -278,6 +279,7 @@ static int __process_buffer(journal_t *j +@@ -291,6 +292,7 @@ bhs[*batch_count] = bh; __buffer_relink_io(jh); jbd_unlock_bh_state(bh); @@ -572,7 +572,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c (*batch_count)++; if (*batch_count == NR_BATCH) { spin_unlock(&journal->j_list_lock); -@@ -321,6 +323,8 @@ int log_do_checkpoint(journal_t *journal +@@ -336,6 +338,8 @@ if (!journal->j_checkpoint_transactions) goto out; transaction = journal->j_checkpoint_transactions; @@ -581,17 +581,17 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c this_tid = transaction->t_tid; restart: /* -@@ -345,7 +349,8 @@ restart: +@@ -360,7 +364,8 @@ retry = 1; break; } - retry = __process_buffer(journal, jh, bhs,&batch_count); + retry = __process_buffer(journal, jh, bhs,&batch_count, + transaction); - if (retry < 0 && !result) - result = retry; - if (!retry && lock_need_resched(&journal->j_list_lock)){ -@@ -667,6 +672,8 @@ void __journal_insert_checkpoint(struct + if (retry < 0 && !result) + result = retry; + if (!retry && lock_need_resched(&journal->j_list_lock)){ +@@ -692,6 +697,8 @@ void __journal_drop_transaction(journal_t *journal, transaction_t *transaction) { @@ -600,7 +600,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c assert_spin_locked(&journal->j_list_lock); if (transaction->t_cpnext) { transaction->t_cpnext->t_cpprev = transaction->t_cpprev; -@@ -693,5 +700,25 @@ void __journal_drop_transaction(journal_ +@@ -718,5 +725,25 @@ J_ASSERT(journal->j_running_transaction != transaction); jbd_debug(1, "Dropping transaction %d, all done\n", transaction->t_tid); @@ -626,10 +626,10 @@ Index: linux-2.6.18-8.1.8/fs/jbd/checkpoint.c + kfree(transaction); } -Index: linux-2.6.18-8.1.8/fs/jbd/commit.c +Index: linux-2.6.18-128.1.6/fs/jbd/commit.c =================================================================== ---- linux-2.6.18-8.1.8.orig/fs/jbd/commit.c 2007-08-28 22:22:10.000000000 +0200 -+++ linux-2.6.18-8.1.8/fs/jbd/commit.c 2007-08-28 22:22:29.000000000 +0200 +--- linux-2.6.18-128.1.6.orig/fs/jbd/commit.c 2009-06-02 23:22:50.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/jbd/commit.c 2009-06-02 23:24:00.000000000 -0600 @@ -13,6 +13,7 @@ * part of the ext2fs journaling system. */ @@ -638,15 +638,15 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c #include #include #include -@@ -23,6 +24,7 @@ +@@ -22,6 +23,7 @@ + #include #include - #include + /* * Default IO end handler for temporary BJ_IO buffer_heads. */ -@@ -355,6 +357,7 @@ write_out_data: +@@ -288,6 +290,7 @@ */ void journal_commit_transaction(journal_t *journal) { @@ -654,7 +654,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c transaction_t *commit_transaction; struct journal_head *jh, *new_jh, *descriptor; struct buffer_head **wbuf = journal->j_wbuf; -@@ -403,6 +406,11 @@ void journal_commit_transaction(journal_ +@@ -334,6 +337,11 @@ spin_lock(&journal->j_state_lock); commit_transaction->t_state = T_LOCKED; @@ -666,7 +666,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c spin_lock(&commit_transaction->t_handle_lock); while (commit_transaction->t_updates) { DEFINE_WAIT(wait); -@@ -473,6 +481,9 @@ void journal_commit_transaction(journal_ +@@ -404,6 +412,9 @@ */ journal_switch_revoke_table(journal); @@ -676,9 +676,9 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c commit_transaction->t_state = T_FLUSH; journal->j_committing_transaction = commit_transaction; journal->j_running_transaction = NULL; -@@ -540,6 +551,11 @@ void journal_commit_transaction(journal_ - */ - commit_transaction->t_state = T_COMMIT; +@@ -484,6 +495,11 @@ + J_ASSERT(commit_transaction->t_nr_buffers <= + commit_transaction->t_outstanding_credits); + stats.ts_logging = CURRENT_MSECS; + stats.ts_flushing = jbd_time_diff(stats.ts_flushing, stats.ts_logging); @@ -688,7 +688,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c descriptor = NULL; bufs = 0; while (commit_transaction->t_buffers) { -@@ -698,6 +714,7 @@ start_journal_io: +@@ -633,6 +649,7 @@ submit_bh(WRITE, bh); } cond_resched(); @@ -696,7 +696,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c /* Force a new descriptor to be generated next time round the loop. */ -@@ -915,6 +932,7 @@ restart_loop: +@@ -832,6 +849,7 @@ cp_transaction = jh->b_cp_transaction; if (cp_transaction) { JBUFFER_TRACE(jh, "remove from old cp transaction"); @@ -704,7 +704,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c __journal_remove_checkpoint(jh); } -@@ -989,6 +1007,36 @@ restart_loop: +@@ -908,6 +926,36 @@ J_ASSERT(commit_transaction->t_state == T_COMMIT); @@ -741,4 +741,3 @@ Index: linux-2.6.18-8.1.8/fs/jbd/commit.c commit_transaction->t_state = T_FINISHED; J_ASSERT(commit_transaction == journal->j_committing_transaction); journal->j_commit_sequence = commit_transaction->t_tid; - diff --git a/lustre/kernel_patches/patches/md-rebuild-policy.patch b/lustre/kernel_patches/patches/md-rebuild-policy.patch index 62bb484..d42dae4 100644 --- a/lustre/kernel_patches/patches/md-rebuild-policy.patch +++ b/lustre/kernel_patches/patches/md-rebuild-policy.patch @@ -1,7 +1,8 @@ -diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c ---- linux-2.6.18-53.orig/drivers/md/md.c 2008-02-13 17:34:25.000000000 +0800 -+++ linux-2.6.18-53/drivers/md/md.c 2008-02-13 17:39:28.000000000 +0800 -@@ -90,6 +90,8 @@ static void md_print_devices(void); +Index: linux-2.6.18-128.1.6/drivers/md/md.c +=================================================================== +--- linux-2.6.18-128.1.6.orig/drivers/md/md.c 2009-04-14 21:05:26.000000000 -0600 ++++ linux-2.6.18-128.1.6/drivers/md/md.c 2009-06-02 23:25:31.000000000 -0600 +@@ -90,6 +90,8 @@ static int sysctl_speed_limit_min = 1000; static int sysctl_speed_limit_max = 200000; @@ -10,7 +11,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c static inline int speed_min(mddev_t *mddev) { return mddev->sync_speed_min ? -@@ -121,6 +123,22 @@ static ctl_table raid_table[] = { +@@ -121,6 +123,22 @@ .mode = S_IRUGO|S_IWUSR, .proc_handler = &proc_dointvec, }, @@ -33,7 +34,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c { .ctl_name = 0 } }; -@@ -4980,15 +4998,16 @@ static int is_mddev_idle(mddev_t *mddev) +@@ -5009,15 +5027,16 @@ { mdk_rdev_t * rdev; int idle; @@ -41,8 +42,8 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c + unsigned long rw, sync; idle = 1; - rcu_read_lock(); - rdev_for_each_rcu(rdev, mddev) { + rcu_read_lock(); + rdev_for_each_rcu(rdev, mddev) { struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; - curr_events = disk_stat_read(disk, sectors[0]) + - disk_stat_read(disk, sectors[1]) - @@ -54,7 +55,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c /* The difference between curr_events and last_events * will be affected by any new non-sync IO (making * curr_events bigger) and any difference in the amount of -@@ -5001,9 +5020,9 @@ static int is_mddev_idle(mddev_t *mddev) +@@ -5031,9 +5050,9 @@ * * Note: the following is an unsigned comparison. */ @@ -65,8 +66,8 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c + rdev->last_events = rw - sync; } } - return idle; -@@ -5069,8 +5088,7 @@ static DECLARE_WAIT_QUEUE_HEAD(resync_wa + rcu_read_unlock(); +@@ -5100,8 +5119,7 @@ void md_do_sync(mddev_t *mddev) { mddev_t *mddev2; @@ -76,7 +77,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c sector_t max_sectors,j, io_sectors; unsigned long mark[SYNC_MARKS]; sector_t mark_cnt[SYNC_MARKS]; -@@ -5190,9 +5208,8 @@ void md_do_sync(mddev_t *mddev) +@@ -5221,9 +5239,8 @@ /* * Tune reconstruction: */ @@ -87,7 +88,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c atomic_set(&mddev->recovery_active, 0); init_waitqueue_head(&mddev->recovery_wait); -@@ -5230,7 +5247,7 @@ void md_do_sync(mddev_t *mddev) +@@ -5261,7 +5278,7 @@ */ md_new_event(mddev); @@ -96,7 +97,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c continue; last_check = io_sectors; -@@ -5251,7 +5268,6 @@ void md_do_sync(mddev_t *mddev) +@@ -5282,7 +5299,6 @@ last_mark = next; } @@ -104,7 +105,7 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c if (kthread_should_stop()) { /* * got a signal, exit. -@@ -5275,10 +5291,16 @@ void md_do_sync(mddev_t *mddev) +@@ -5306,10 +5322,16 @@ currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2 /((jiffies-mddev->resync_mark)/HZ +1) +1; @@ -122,10 +123,11 @@ diff -pur linux-2.6.18-53.orig/drivers/md/md.c linux-2.6.18-53/drivers/md/md.c msleep(500); goto repeat; } -diff -pur linux-2.6.18-53.orig/include/linux/sysctl.h linux-2.6.18-53/include/linux/sysctl.h ---- linux-2.6.18-53.orig/include/linux/sysctl.h 2008-02-13 17:35:25.000000000 +0800 -+++ linux-2.6.18-53/include/linux/sysctl.h 2008-02-13 17:36:22.000000000 +0800 -@@ -903,7 +903,9 @@ enum { +Index: linux-2.6.18-128.1.6/include/linux/sysctl.h +=================================================================== +--- linux-2.6.18-128.1.6.orig/include/linux/sysctl.h 2009-04-14 21:05:41.000000000 -0600 ++++ linux-2.6.18-128.1.6/include/linux/sysctl.h 2009-06-02 23:25:31.000000000 -0600 +@@ -928,7 +928,9 @@ /* /proc/sys/dev/raid */ enum { DEV_RAID_SPEED_LIMIT_MIN=1, diff --git a/lustre/kernel_patches/patches/quota-large-limits-rhel5.patch b/lustre/kernel_patches/patches/quota-large-limits-rhel5.patch index 4f3a3bc..e53d871 100644 --- a/lustre/kernel_patches/patches/quota-large-limits-rhel5.patch +++ b/lustre/kernel_patches/patches/quota-large-limits-rhel5.patch @@ -1,7 +1,8 @@ -diff -rNpu linux-2.6.16.54-0.2.5/fs/dquot.c linux-2.6.16.54-0.2.5-quota/fs/dquot.c ---- linux-2.6.16.54-0.2.5/fs/dquot.c 2008-03-18 15:48:26.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/fs/dquot.c 2008-03-17 22:43:11.000000000 +0300 -@@ -1588,10 +1588,19 @@ int vfs_get_dqblk(struct super_block *sb +Index: linux-2.6.18-128.1.6/fs/dquot.c +=================================================================== +--- linux-2.6.18-128.1.6.orig/fs/dquot.c 2009-04-14 21:04:50.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/dquot.c 2009-06-02 23:26:36.000000000 -0600 +@@ -1592,10 +1592,19 @@ } /* Generic routine for setting common part of quota structure */ @@ -22,7 +23,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/dquot.c linux-2.6.16.54-0.2.5-quota/fs/dquot spin_lock(&dq_data_lock); if (di->dqb_valid & QIF_SPACE) { -@@ -1623,7 +1632,7 @@ static void do_set_dqblk(struct dquot *d +@@ -1627,7 +1636,7 @@ clear_bit(DQ_BLKS_B, &dquot->dq_flags); } else if (!(di->dqb_valid & QIF_BTIME)) /* Set grace only if user hasn't provided his own... */ @@ -31,7 +32,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/dquot.c linux-2.6.16.54-0.2.5-quota/fs/dquot } if (check_ilim) { if (!dm->dqb_isoftlimit || dm->dqb_curinodes < dm->dqb_isoftlimit) { -@@ -1631,7 +1640,7 @@ static void do_set_dqblk(struct dquot *d +@@ -1635,7 +1644,7 @@ clear_bit(DQ_INODES_B, &dquot->dq_flags); } else if (!(di->dqb_valid & QIF_ITIME)) /* Set grace only if user hasn't provided his own... */ @@ -40,7 +41,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/dquot.c linux-2.6.16.54-0.2.5-quota/fs/dquot } if (dm->dqb_bhardlimit || dm->dqb_bsoftlimit || dm->dqb_ihardlimit || dm->dqb_isoftlimit) clear_bit(DQ_FAKE_B, &dquot->dq_flags); -@@ -1639,21 +1648,24 @@ static void do_set_dqblk(struct dquot *d +@@ -1643,21 +1652,24 @@ set_bit(DQ_FAKE_B, &dquot->dq_flags); spin_unlock(&dq_data_lock); mark_dquot_dirty(dquot); @@ -67,10 +68,11 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/dquot.c linux-2.6.16.54-0.2.5-quota/fs/dquot } /* Generic routine for getting common part of quota file information */ -diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v1.c linux-2.6.16.54-0.2.5-quota/fs/quota_v1.c ---- linux-2.6.16.54-0.2.5/fs/quota_v1.c 2006-03-20 08:53:29.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/fs/quota_v1.c 2008-03-17 22:42:47.000000000 +0300 -@@ -139,6 +139,9 @@ static int v1_read_file_info(struct supe +Index: linux-2.6.18-128.1.6/fs/quota_v1.c +=================================================================== +--- linux-2.6.18-128.1.6.orig/fs/quota_v1.c 2006-09-19 21:42:06.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/quota_v1.c 2009-06-02 23:26:36.000000000 -0600 +@@ -139,6 +139,9 @@ goto out; } ret = 0; @@ -80,10 +82,11 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v1.c linux-2.6.16.54-0.2.5-quota/fs/qu dqopt->info[type].dqi_igrace = dqblk.dqb_itime ? dqblk.dqb_itime : MAX_IQ_TIME; dqopt->info[type].dqi_bgrace = dqblk.dqb_btime ? dqblk.dqb_btime : MAX_DQ_TIME; out: -diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/quota_v2.c ---- linux-2.6.16.54-0.2.5/fs/quota_v2.c 2006-03-20 08:53:29.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/fs/quota_v2.c 2008-03-18 11:58:02.000000000 +0300 -@@ -23,26 +23,64 @@ MODULE_LICENSE("GPL"); +Index: linux-2.6.18-128.1.6/fs/quota_v2.c +=================================================================== +--- linux-2.6.18-128.1.6.orig/fs/quota_v2.c 2006-09-19 21:42:06.000000000 -0600 ++++ linux-2.6.18-128.1.6/fs/quota_v2.c 2009-06-02 23:26:36.000000000 -0600 +@@ -23,26 +23,64 @@ typedef char *dqbuf_t; #define GETIDINDEX(id, depth) (((id) >> ((V2_DQTREEDEPTH-(depth)-1)*8)) & 0xff) @@ -157,7 +160,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu } /* Read information header from quota file */ -@@ -51,6 +89,13 @@ static int v2_read_file_info(struct supe +@@ -51,6 +89,13 @@ struct v2_disk_dqinfo dinfo; struct mem_dqinfo *info = sb_dqopt(sb)->info+type; ssize_t size; @@ -171,7 +174,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu size = sb->s_op->quota_read(sb, type, (char *)&dinfo, sizeof(struct v2_disk_dqinfo), V2_DQINFOOFF); -@@ -65,6 +110,16 @@ static int v2_read_file_info(struct supe +@@ -65,6 +110,16 @@ info->u.v2_i.dqi_blocks = le32_to_cpu(dinfo.dqi_blocks); info->u.v2_i.dqi_free_blk = le32_to_cpu(dinfo.dqi_free_blk); info->u.v2_i.dqi_free_entry = le32_to_cpu(dinfo.dqi_free_entry); @@ -188,7 +191,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu return 0; } -@@ -94,29 +149,61 @@ static int v2_write_file_info(struct sup +@@ -94,29 +149,61 @@ return 0; } @@ -272,7 +275,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu } static dqbuf_t getdqbuf(void) -@@ -268,10 +355,10 @@ static uint find_free_dqentry(struct dqu +@@ -268,10 +355,10 @@ { struct super_block *sb = dquot->dq_sb; struct mem_dqinfo *info = sb_dqopt(sb)->info+dquot->dq_type; @@ -286,7 +289,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu dqbuf_t buf; *err = 0; -@@ -298,17 +385,18 @@ static uint find_free_dqentry(struct dqu +@@ -298,17 +385,18 @@ info->u.v2_i.dqi_free_entry = blk; mark_info_dirty(sb, dquot->dq_type); } @@ -309,7 +312,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu printk(KERN_ERR "VFS: find_free_dqentry(): Data block full but it shouldn't.\n"); *err = -EIO; goto out_buf; -@@ -318,7 +406,8 @@ static uint find_free_dqentry(struct dqu +@@ -318,7 +406,8 @@ printk(KERN_ERR "VFS: find_free_dqentry(): Can't write quota data block %u.\n", blk); goto out_buf; } @@ -319,7 +322,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu freedqbuf(buf); return blk; out_buf: -@@ -392,7 +481,9 @@ static int v2_write_dquot(struct dquot * +@@ -392,7 +481,9 @@ { int type = dquot->dq_type; ssize_t ret; @@ -328,9 +331,9 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu + uint rev = sb_dqopt(dquot->dq_sb)->info[type].u.v2_i.dqi_revision; + uint dqblksz = v2_dqblksz(rev); - /* dq_off is guarded by dqio_sem */ + /* dq_off is guarded by dqio_mutex */ if (!dquot->dq_off) -@@ -401,18 +492,22 @@ static int v2_write_dquot(struct dquot * +@@ -401,18 +492,22 @@ return ret; } spin_lock(&dq_data_lock); @@ -360,7 +363,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu if (ret >= 0) ret = -ENOSPC; } -@@ -431,6 +526,7 @@ static int free_dqentry(struct dquot *dq +@@ -431,6 +526,7 @@ struct v2_disk_dqdbheader *dh; dqbuf_t buf = getdqbuf(); int ret = 0; @@ -368,7 +371,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu if (!buf) return -ENOMEM; -@@ -456,8 +552,8 @@ static int free_dqentry(struct dquot *dq +@@ -456,8 +552,8 @@ } else { memset(buf+(dquot->dq_off & ((1 << V2_DQBLKSIZE_BITS)-1)), 0, @@ -379,7 +382,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu /* Insert will write block itself */ if ((ret = insert_free_dqentry(sb, type, buf, blk)) < 0) { printk(KERN_ERR "VFS: Can't insert quota data block (%u) to free entry list.\n", blk); -@@ -529,41 +625,56 @@ static int v2_delete_dquot(struct dquot +@@ -529,41 +625,56 @@ return remove_tree(dquot, &tmp, 0); } @@ -449,7 +452,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu out_buf: freedqbuf(buf); return ret; -@@ -605,7 +716,7 @@ static int v2_read_dquot(struct dquot *d +@@ -605,7 +716,7 @@ { int type = dquot->dq_type; loff_t offset; @@ -458,7 +461,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu int ret = 0; #ifdef __QUOTA_V2_PARANOIA -@@ -626,25 +737,30 @@ static int v2_read_dquot(struct dquot *d +@@ -626,25 +737,30 @@ ret = offset; } else { @@ -498,10 +501,11 @@ diff -rNpu linux-2.6.16.54-0.2.5/fs/quota_v2.c linux-2.6.16.54-0.2.5-quota/fs/qu if (!dquot->dq_dqb.dqb_bhardlimit && !dquot->dq_dqb.dqb_bsoftlimit && !dquot->dq_dqb.dqb_ihardlimit && -diff -rNpu linux-2.6.16.54-0.2.5/include/linux/dqblk_v2.h linux-2.6.16.54-0.2.5-quota/include/linux/dqblk_v2.h ---- linux-2.6.16.54-0.2.5/include/linux/dqblk_v2.h 2006-03-20 08:53:29.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/include/linux/dqblk_v2.h 2008-03-17 23:39:54.000000000 +0300 -@@ -21,6 +21,7 @@ struct v2_mem_dqinfo { +Index: linux-2.6.18-128.1.6/include/linux/dqblk_v2.h +=================================================================== +--- linux-2.6.18-128.1.6.orig/include/linux/dqblk_v2.h 2006-09-19 21:42:06.000000000 -0600 ++++ linux-2.6.18-128.1.6/include/linux/dqblk_v2.h 2009-06-02 23:26:36.000000000 -0600 +@@ -21,6 +21,7 @@ unsigned int dqi_blocks; unsigned int dqi_free_blk; unsigned int dqi_free_entry; @@ -509,10 +513,11 @@ diff -rNpu linux-2.6.16.54-0.2.5/include/linux/dqblk_v2.h linux-2.6.16.54-0.2.5- }; #endif /* _LINUX_DQBLK_V2_H */ -diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quota.h linux-2.6.16.54-0.2.5-quota/include/linux/quota.h ---- linux-2.6.16.54-0.2.5/include/linux/quota.h 2006-03-20 08:53:29.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/include/linux/quota.h 2008-03-17 23:39:54.000000000 +0300 -@@ -148,12 +148,12 @@ struct if_dqinfo { +Index: linux-2.6.18-128.1.6/include/linux/quota.h +=================================================================== +--- linux-2.6.18-128.1.6.orig/include/linux/quota.h 2006-09-19 21:42:06.000000000 -0600 ++++ linux-2.6.18-128.1.6/include/linux/quota.h 2009-06-02 23:26:36.000000000 -0600 +@@ -149,12 +149,12 @@ * Data for one user/group kept in memory */ struct mem_dqblk { @@ -530,7 +535,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quota.h linux-2.6.16.54-0.2.5-quo time_t dqb_btime; /* time limit for excessive disk use */ time_t dqb_itime; /* time limit for excessive inode use */ }; -@@ -169,6 +169,8 @@ struct mem_dqinfo { +@@ -170,6 +170,8 @@ unsigned long dqi_flags; unsigned int dqi_bgrace; unsigned int dqi_igrace; @@ -539,9 +544,10 @@ diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quota.h linux-2.6.16.54-0.2.5-quo union { struct v1_mem_dqinfo v1_i; struct v2_mem_dqinfo v2_i; -diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quotaio_v2.h linux-2.6.16.54-0.2.5-quota/include/linux/quotaio_v2.h ---- linux-2.6.16.54-0.2.5/include/linux/quotaio_v2.h 2006-03-20 08:53:29.000000000 +0300 -+++ linux-2.6.16.54-0.2.5-quota/include/linux/quotaio_v2.h 2008-03-17 23:39:54.000000000 +0300 +Index: linux-2.6.18-128.1.6/include/linux/quotaio_v2.h +=================================================================== +--- linux-2.6.18-128.1.6.orig/include/linux/quotaio_v2.h 2006-09-19 21:42:06.000000000 -0600 ++++ linux-2.6.18-128.1.6/include/linux/quotaio_v2.h 2009-06-02 23:26:36.000000000 -0600 @@ -16,28 +16,51 @@ 0xd9c01927 /* GRPQUOTA */\ } @@ -598,7 +604,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quotaio_v2.h linux-2.6.16.54-0.2. /* * Here are header structures as written on disk and their in-memory copies */ -@@ -59,7 +82,7 @@ struct v2_disk_dqinfo { +@@ -59,7 +82,7 @@ /* * Structure of header of block with quota structures. It is padded to 16 bytes so @@ -607,7 +613,7 @@ diff -rNpu linux-2.6.16.54-0.2.5/include/linux/quotaio_v2.h linux-2.6.16.54-0.2. */ struct v2_disk_dqdbheader { __le32 dqdh_next_free; /* Number of next block with free entry */ -@@ -74,6 +97,5 @@ struct v2_disk_dqdbheader { +@@ -74,6 +97,5 @@ #define V2_DQBLKSIZE (1 << V2_DQBLKSIZE_BITS) /* Size of block with quota structures */ #define V2_DQTREEOFF 1 /* Offset of tree in file in blocks */ #define V2_DQTREEDEPTH 4 /* Depth of quota tree */ diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev.patch index 0334abd..cc25153 100644 --- a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev.patch +++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev.patch @@ -1,8 +1,8 @@ -Index: linux-2.6.22.14/drivers/md/raid5.c +Index: linux-2.6.18-128.1.6/drivers/md/raid5.c =================================================================== ---- linux-2.6.22.14.orig/drivers/md/raid5.c -+++ linux-2.6.22.14/drivers/md/raid5.c -@@ -1268,6 +1268,8 @@ static int add_stripe_bio(struct stripe_ +--- linux-2.6.18-128.1.6.orig/drivers/md/raid5.c 2009-06-02 23:24:55.000000000 -0600 ++++ linux-2.6.18-128.1.6/drivers/md/raid5.c 2009-06-02 23:27:21.000000000 -0600 +@@ -1456,6 +1456,8 @@ bi->bi_next = *bip; *bip = bi; bi->bi_phys_segments ++; @@ -11,9 +11,9 @@ Index: linux-2.6.22.14/drivers/md/raid5.c spin_unlock_irq(&conf->device_lock); spin_unlock(&sh->lock); -@@ -2972,6 +2974,8 @@ static int make_request(request_queue_t - test_bit(BIO_UPTODATE, &bi->bi_flags) - ? 0 : -EIO); +@@ -3012,6 +3014,8 @@ + bi->bi_size = 0; + bi->bi_end_io(bi, bytes, 0); } + if (bio_sync(bi)) + raid5_unplug_device(q); diff --git a/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch b/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch index 31b825e..ccfb87b 100644 --- a/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch +++ b/lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch @@ -1,7 +1,8 @@ -diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/drivers/md/raid5.c ---- linux-2.6.18-92.1.22.orig/drivers/md/raid5.c 2009-02-10 13:47:54.000000000 +0800 -+++ linux-2.6.18-92.1.22/drivers/md/raid5.c 2009-02-10 14:44:24.000000000 +0800 -@@ -633,6 +633,9 @@ static int raid5_end_read_request(struct +Index: linux-2.6.18-128.1.6/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 +@@ -633,6 +633,9 @@ clear_buffer_uptodate(bh); } #endif @@ -11,7 +12,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); release_stripe(sh); -@@ -671,6 +674,10 @@ static int raid5_end_write_request (stru +@@ -669,6 +672,10 @@ rdev_dec_pending(conf->disks[i].rdev, conf->mddev); @@ -21,8 +22,8 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv + } clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); - __release_stripe(conf, sh); -@@ -911,7 +918,27 @@ static sector_t compute_blocknr(struct s + release_stripe(sh); +@@ -910,7 +917,27 @@ return r_sector; } @@ -50,7 +51,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv /* * Copy data between a page in the stripe cache, and one or more bion -@@ -1003,8 +1030,9 @@ static void compute_parity5(struct strip +@@ -1002,8 +1029,9 @@ { raid5_conf_t *conf = sh->raid_conf; int i, pd_idx = sh->pd_idx, disks = sh->disks, count; @@ -61,7 +62,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv PRINTK("compute_parity5, stripe %llu, method %d\n", (unsigned long long)sh->sector, method); -@@ -1054,34 +1082,92 @@ static void compute_parity5(struct strip +@@ -1053,34 +1081,92 @@ count = 1; } @@ -171,7 +172,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv } if (count != 1) xor_block(count, STRIPE_SIZE, ptr); -@@ -1098,6 +1184,7 @@ static void compute_parity6(struct strip +@@ -1097,6 +1183,7 @@ raid6_conf_t *conf = sh->raid_conf; int i, pd_idx = sh->pd_idx, qd_idx, d0_idx, disks = conf->raid_disks, count; struct bio *chosen; @@ -179,7 +180,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv /**** FIX THIS: This could be very bad if disks is close to 256 ****/ void *ptrs[disks]; -@@ -1127,18 +1214,49 @@ static void compute_parity6(struct strip +@@ -1126,18 +1213,49 @@ BUG(); /* Not implemented yet */ } @@ -238,7 +239,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv // switch(method) { // case RECONSTRUCT_WRITE: -@@ -1149,8 +1267,12 @@ static void compute_parity6(struct strip +@@ -1148,8 +1266,12 @@ count = 0; i = d0_idx; do { @@ -253,7 +254,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv printk("block %d/%d not uptodate on parity calc\n", i,count); i = raid6_next_disk(i, disks); } while ( i != d0_idx ); -@@ -1599,7 +1721,8 @@ static void handle_stripe5(struct stripe +@@ -1596,7 +1718,8 @@ if (sh->dev[i].written) { dev = &sh->dev[i]; if (!test_bit(R5_LOCKED, &dev->flags) && @@ -263,7 +264,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv /* We can return any write requests */ struct bio *wbi, *wbi2; int bitmap_end = 0; -@@ -1607,6 +1730,7 @@ static void handle_stripe5(struct stripe +@@ -1604,6 +1727,7 @@ spin_lock_irq(&conf->device_lock); wbi = dev->written; dev->written = NULL; @@ -271,7 +272,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv while (wbi && wbi->bi_sector < dev->sector + STRIPE_SECTORS) { wbi2 = r5_next_bio(wbi, dev->sector); if (--wbi->bi_phys_segments == 0) { -@@ -1970,6 +2094,15 @@ static void handle_stripe5(struct stripe +@@ -1967,6 +2091,15 @@ set_bit(STRIPE_DEGRADED, &sh->state); PRINTK("skip op %ld on disc %d for sector %llu\n", bi->bi_rw, i, (unsigned long long)sh->sector); @@ -287,7 +288,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); } -@@ -2175,7 +2308,8 @@ static void handle_stripe6(struct stripe +@@ -2172,7 +2305,8 @@ if (sh->dev[i].written) { dev = &sh->dev[i]; if (!test_bit(R5_LOCKED, &dev->flags) && @@ -297,7 +298,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv /* We can return any write requests */ int bitmap_end = 0; struct bio *wbi, *wbi2; -@@ -2184,6 +2318,7 @@ static void handle_stripe6(struct stripe +@@ -2181,6 +2315,7 @@ spin_lock_irq(&conf->device_lock); wbi = dev->written; dev->written = NULL; @@ -305,7 +306,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv while (wbi && wbi->bi_sector < dev->sector + STRIPE_SECTORS) { wbi2 = r5_next_bio(wbi, dev->sector); if (--wbi->bi_phys_segments == 0) { -@@ -2535,6 +2670,15 @@ static void handle_stripe6(struct stripe +@@ -2532,6 +2667,15 @@ set_bit(STRIPE_DEGRADED, &sh->state); PRINTK("skip op %ld on disc %d for sector %llu\n", bi->bi_rw, i, (unsigned long long)sh->sector); @@ -321,7 +322,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv clear_bit(R5_LOCKED, &sh->dev[i].flags); set_bit(STRIPE_HANDLE, &sh->state); } -@@ -3456,6 +3600,9 @@ static int run(mddev_t *mddev) +@@ -3451,6 +3595,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;; @@ -331,7 +332,7 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv return 0; abort: if (conf) { -@@ -3542,9 +3689,11 @@ static void status (struct seq_file *seq +@@ -3537,9 +3684,11 @@ atomic_read(&conf->handled_in_raid5d), atomic_read(&conf->out_of_stripes), atomic_read(&conf->handle_called)); @@ -345,10 +346,11 @@ diff -pur linux-2.6.18-92.1.22.orig/drivers/md/raid5.c linux-2.6.18-92.1.22/driv 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), -diff -pur linux-2.6.18-92.1.22.orig/include/linux/backing-dev.h linux-2.6.18-92.1.22/include/linux/backing-dev.h ---- linux-2.6.18-92.1.22.orig/include/linux/backing-dev.h 2009-02-10 13:47:54.000000000 +0800 -+++ linux-2.6.18-92.1.22/include/linux/backing-dev.h 2009-02-10 14:44:14.000000000 +0800 -@@ -48,6 +48,7 @@ struct backing_dev_info { +Index: linux-2.6.18-128.1.6/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 +@@ -48,6 +48,7 @@ #define BDI_CAP_READ_MAP 0x00000010 /* Can be mapped for reading */ #define BDI_CAP_WRITE_MAP 0x00000020 /* Can be mapped for writing */ #define BDI_CAP_EXEC_MAP 0x00000040 /* Can be mapped for execution */ @@ -356,7 +358,7 @@ diff -pur linux-2.6.18-92.1.22.orig/include/linux/backing-dev.h linux-2.6.18-92. #define BDI_CAP_VMFLAGS \ (BDI_CAP_READ_MAP | BDI_CAP_WRITE_MAP | BDI_CAP_EXEC_MAP) -@@ -94,11 +95,18 @@ static inline int bdi_rw_congested(struc +@@ -94,11 +95,18 @@ #define bdi_cap_account_dirty(bdi) \ (!((bdi)->capabilities & BDI_CAP_NO_ACCT_DIRTY)) @@ -375,9 +377,10 @@ diff -pur linux-2.6.18-92.1.22.orig/include/linux/backing-dev.h linux-2.6.18-92. + #endif /* _LINUX_BACKING_DEV_H */ -diff -pur linux-2.6.18-92.1.22.orig/include/linux/page-flags.h linux-2.6.18-92.1.22/include/linux/page-flags.h ---- linux-2.6.18-92.1.22.orig/include/linux/page-flags.h 2009-02-10 13:47:54.000000000 +0800 -+++ linux-2.6.18-92.1.22/include/linux/page-flags.h 2009-02-10 14:44:14.000000000 +0800 +Index: linux-2.6.18-128.1.6/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 @@ #define PG_reclaim 17 /* To be reclaimed asap */ #define PG_nosave_free 18 /* Free, should not be written */ @@ -401,10 +404,11 @@ diff -pur linux-2.6.18-92.1.22.orig/include/linux/page-flags.h linux-2.6.18-92.1 int test_clear_page_dirty(struct page *page); int test_clear_page_writeback(struct page *page); int test_set_page_writeback(struct page *page); -diff -pur linux-2.6.18-92.1.22.orig/include/linux/raid/raid5.h linux-2.6.18-92.1.22/include/linux/raid/raid5.h ---- linux-2.6.18-92.1.22.orig/include/linux/raid/raid5.h 2009-02-10 13:47:54.000000000 +0800 -+++ linux-2.6.18-92.1.22/include/linux/raid/raid5.h 2009-02-10 14:44:14.000000000 +0800 -@@ -156,8 +156,9 @@ struct stripe_head { +Index: linux-2.6.18-128.1.6/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 +@@ -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 */ #define R5_ReWrite 9 /* have tried to over-write the readerror */ @@ -415,9 +419,10 @@ diff -pur linux-2.6.18-92.1.22.orig/include/linux/raid/raid5.h linux-2.6.18-92.1 /* * Write method */ -diff -pur linux-2.6.18-92.1.22.orig/mm/filemap.c linux-2.6.18-92.1.22/mm/filemap.c ---- linux-2.6.18-92.1.22.orig/mm/filemap.c 2009-02-10 13:47:54.000000000 +0800 -+++ linux-2.6.18-92.1.22/mm/filemap.c 2009-02-10 14:44:14.000000000 +0800 +Index: linux-2.6.18-128.1.6/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 @@ -30,6 +30,7 @@ #include #include @@ -426,7 +431,7 @@ diff -pur linux-2.6.18-92.1.22.orig/mm/filemap.c linux-2.6.18-92.1.22/mm/filemap #include "filemap.h" #include "internal.h" -@@ -566,11 +567,55 @@ void end_page_writeback(struct page *pag +@@ -567,11 +568,55 @@ if (!test_clear_page_writeback(page)) BUG(); } diff --git a/lustre/kernel_patches/targets/2.6-rhel5.target.in b/lustre/kernel_patches/targets/2.6-rhel5.target.in index 312d212..7724a57 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="128.1.1.el5" +lnxrel="128.1.6.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 8253b37..0a30003 100644 --- a/lustre/kernel_patches/which_patch +++ b/lustre/kernel_patches/which_patch @@ -3,7 +3,7 @@ SERIES VERSION COMMENT SUPPORTED KERNELS: 2.6-rhel4 RHEL4: 2.6.9-67.0.20.EL 2.6-sles10 SLES10: 2.6.16.60-0.37 -2.6-rhel5 RHEL5: 2.6.18-128.1.1.el5 +2.6-rhel5 RHEL5: 2.6.18-128.1.6.el5 2.6.18-vanilla kernel.org: 2.6.18.8 2.6.22-vanilla kernel.org: 2.6.22.14