Whamcloud - gitweb
b=19024
authoryangsheng <yangsheng>
Wed, 3 Jun 2009 07:30:57 +0000 (07:30 +0000)
committeryangsheng <yangsheng>
Wed, 3 Jun 2009 07:30:57 +0000 (07:30 +0000)
i=shadow, bobijam

Update kernel to RHEL5.3 2.6.18-128.1.6.el5.

lustre/ChangeLog
lustre/kernel_patches/patches/jbd-journal-chksum-2.6.18-vanilla.patch
lustre/kernel_patches/patches/jbd-stats-2.6-rhel5.patch
lustre/kernel_patches/patches/md-rebuild-policy.patch
lustre/kernel_patches/patches/quota-large-limits-rhel5.patch
lustre/kernel_patches/patches/raid5-mmp-unplug-dev.patch
lustre/kernel_patches/patches/raid5-zerocopy-rhel5.patch
lustre/kernel_patches/targets/2.6-rhel5.target.in
lustre/kernel_patches/which_patch

index 57172c2..c820af3 100644 (file)
@@ -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.
 
index 3c20f0c..49ed3de 100644 (file)
@@ -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 <linux/mm.h>
  #include <linux/pagemap.h>
@@ -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 <linux/jbd.h>
  #include <linux/errno.h>
@@ -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
  
index c770722..67832a6 100644 (file)
@@ -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 <linux/kthread.h>
  #include <linux/poison.h>
@@ -162,7 +162,7 @@ Index: linux-2.6.18-8.1.8/fs/jbd/journal.c
  
  #include <asm/uaccess.h>
  #include <asm/page.h>
-@@ -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 <linux/time.h>
  #include <linux/fs.h>
  #include <linux/jbd.h>
-@@ -23,6 +24,7 @@
+@@ -22,6 +23,7 @@
+ #include <linux/pagemap.h>
  #include <linux/smp_lock.h>
- #include <linux/crc32.h>
  
 +
  /*
   * 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;
-
index 62bb484..d42dae4 100644 (file)
@@ -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,
index 4f3a3bc..e53d871 100644 (file)
@@ -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 */
index 0334abd..cc25153 100644 (file)
@@ -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);
index 31b825e..ccfb87b 100644 (file)
@@ -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 <linux/security.h>
  #include <linux/syscalls.h>
@@ -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();
        }
index 312d212..7724a57 100644 (file)
@@ -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
index 8253b37..0a30003 100644 (file)
@@ -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