tbd Sun Microsystems, Inc.
* version 2.0.0
* Support for kernels:
- 2.6.16.60-0.33 (SLES 10),
+ 2.6.16.60-0.37 (SLES 10),
2.6.18-128.1.1.el5 (RHEL 5),
2.6.22.14 vanilla (kernel.org).
* Client support for unpatched kernels:
removed cwd "./" (refer to Bugzilla 14399).
* File join has been disabled in this release, refer to Bugzilla 16929.
+Severity : enhancement
+Bugzilla : 19212
+Description: Update kernel to SLES10 SP2 2.6.16.60-0.37.
+
Severity : normal
Bugzilla : 19528
Description: resolve race between obd_disconnect and class_disconnect_exports
-Index: linux/mm/page_alloc.c
+Index: linux-2.6.18-128.1.6/mm/page_alloc.c
===================================================================
---- linux.orig/mm/page_alloc.c
-+++ linux/mm/page_alloc.c
-@@ -875,6 +875,7 @@ unsigned int nr_free_buffer_pages(void)
- {
- return nr_free_zone_pages(GFP_USER & GFP_ZONEMASK);
+--- linux-2.6.18-128.1.6.orig/mm/page_alloc.c 2009-04-14 21:05:42.000000000 -0600
++++ linux-2.6.18-128.1.6/mm/page_alloc.c 2009-06-02 23:24:34.000000000 -0600
+@@ -877,6 +877,7 @@
+ }
+ return 1;
}
+EXPORT_SYMBOL(nr_free_buffer_pages);
/*
- * Amount of free RAM allocatable within all zones
+ * get_page_from_freeliest goes through the zonelist trying to allocate
epoch number for the inode. This could be moved to another field in
ldiskfs or elsewhere in the inode that isn't used by Lustre callers.
-Index: linux-2.6.18.8/include/linux/fs.h
+Index: linux-2.6.18-128.1.6/include/linux/fs.h
===================================================================
---- linux-2.6.18.8.orig/include/linux/fs.h 2007-06-05 12:55:19.000000000 +0200
-+++ linux-2.6.18.8/include/linux/fs.h 2007-06-05 12:55:44.000000000 +0200
-@@ -533,6 +533,7 @@ struct inode {
- struct block_device *i_bdev;
- struct cdev *i_cdev;
+--- linux-2.6.18-128.1.6.orig/include/linux/fs.h 2009-04-14 21:05:43.000000000 -0600
++++ linux-2.6.18-128.1.6/include/linux/fs.h 2009-06-02 23:21:44.000000000 -0600
+@@ -580,6 +580,7 @@
+ struct cdev *i_cdev;
+ };
int i_cindex;
+ void *i_filterdata;
/**
@@ -881,6 +921,10 @@
- extern int journal_try_to_free_buffers(journal_t *, struct page *, int);
+ extern int journal_try_to_free_buffers(journal_t *, struct page *, gfp_t);
extern int journal_stop(handle_t *);
extern int journal_flush (journal_t *);
+extern void journal_callback_set(handle_t *handle,
--- 1.53/fs/jbd/commit.c 2004-10-19 03:40:17 -06:00
+++ 1.54/fs/jbd/commit.c 2004-11-07 19:13:24 -07:00
@@ -686,6 +686,30 @@
- if (err)
- __journal_abort_hard(journal);
+ transaction can be removed from any checkpoint list it was on
+ before. */
+ /*
+ * Call any callbacks that had been registered for handles in this
-Index: linux-2.6.16.53-0.16/fs/jbd/commit.c
+Index: linux-2.6.16.60-0.37/fs/jbd/commit.c
===================================================================
---- linux-2.6.16.53-0.16.orig/fs/jbd/commit.c
-+++ linux-2.6.16.53-0.16/fs/jbd/commit.c
+--- linux-2.6.16.60-0.37.orig/fs/jbd/commit.c 2009-06-02 23:33:33.000000000 -0600
++++ linux-2.6.16.60-0.37/fs/jbd/commit.c 2009-06-02 23:33:54.000000000 -0600
@@ -22,6 +22,7 @@
#include <linux/pagemap.h>
#include <linux/smp_lock.h>
/*
* Default IO end handler for temporary BJ_IO buffer_heads.
-@@ -94,19 +95,23 @@ static int inverted_lock(journal_t *jour
+@@ -94,19 +95,23 @@
return 1;
}
int barrier_done = 0;
if (is_journal_aborted(journal))
-@@ -118,21 +123,34 @@ static int journal_write_commit_record(j
+@@ -118,21 +123,34 @@
bh = jh2bh(descriptor);
- ret = sync_dirty_buffer(bh);
+ ret = submit_bh(WRITE, bh);
+
- if (barrier_done)
- clear_buffer_ordered(bh);
- /* is it possible for another commit to fail at roughly
-@@ -153,12 +172,84 @@ static int journal_write_commit_record(j
+ if (barrier_done)
clear_buffer_ordered(bh);
+ /* is it possible for another commit to fail at roughly
+@@ -154,12 +172,84 @@
+ /* And try again, without the barrier */
set_buffer_uptodate(bh);
set_buffer_dirty(bh);
- ret = sync_dirty_buffer(bh);
+ return checksum;
}
- /*
-@@ -184,6 +275,8 @@ void journal_commit_transaction(journal_
+ void journal_do_submit_data(struct buffer_head **wbuf, int bufs)
+@@ -296,6 +386,8 @@
int first_tag = 0;
int tag_flag;
int i;
/*
* First job: lock down the current transaction and wait for
-@@ -395,38 +488,15 @@ write_out_data:
- }
+@@ -439,38 +531,15 @@
+ journal_submit_data_buffers(journal, commit_transaction);
/*
- * Wait for all previously submitted IO to complete.
+ * Wait for all previously submitted IO to complete if commit
+ * record is to be written synchronously.
*/
- spin_lock(&journal->j_list_lock);
+ spin_lock(&journal->j_list_lock);
- while (commit_transaction->t_locked_list) {
- struct buffer_head *bh;
+ if (!JFS_HAS_INCOMPAT_FEATURE(journal,
spin_unlock(&journal->j_list_lock);
if (err)
-@@ -598,6 +668,16 @@ write_out_data:
+@@ -643,6 +712,16 @@
start_journal_io:
for (i = 0; i < bufs; i++) {
struct buffer_head *bh = wbuf[i];
lock_buffer(bh);
clear_buffer_dirty(bh);
set_buffer_uptodate(bh);
-@@ -614,6 +694,23 @@ start_journal_io:
+@@ -659,6 +738,23 @@
}
}
/* 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
-@@ -712,9 +809,15 @@ wait_for_iobuf:
+@@ -757,9 +853,15 @@
}
jbd_debug(3, "JBD: commit phase 6\n");
if (err)
__journal_abort_hard(journal);
-Index: linux-2.6.16.53-0.16/include/linux/jbd.h
-===================================================================
---- linux-2.6.16.53-0.16.orig/include/linux/jbd.h
-+++ linux-2.6.16.53-0.16/include/linux/jbd.h
-@@ -142,6 +142,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
-@@ -228,12 +251,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__
-
-@@ -1041,6 +1068,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.16.53-0.16/fs/jbd/recovery.c
+Index: linux-2.6.16.60-0.37/fs/jbd/recovery.c
===================================================================
---- linux-2.6.16.53-0.16.orig/fs/jbd/recovery.c
-+++ linux-2.6.16.53-0.16/fs/jbd/recovery.c
+--- linux-2.6.16.60-0.37.orig/fs/jbd/recovery.c 2006-03-19 22:53:29.000000000 -0700
++++ linux-2.6.16.60-0.37/fs/jbd/recovery.c 2009-06-02 23:33:54.000000000 -0600
@@ -21,6 +21,7 @@
#include <linux/jbd.h>
#include <linux/errno.h>
#endif
/*
-@@ -307,6 +308,38 @@ int journal_skip_recovery(journal_t *jou
+@@ -307,6 +308,38 @@
return err;
}
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
+@@ -318,6 +351,7 @@
struct buffer_head * bh;
unsigned int sequence;
int blocktype;
/* 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
+@@ -409,9 +443,24 @@
switch(blocktype) {
case JFS_DESCRIPTOR_BLOCK:
/* If it is a valid descriptor block, replay it
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
+@@ -506,9 +555,97 @@
continue;
case JFS_COMMIT_BLOCK:
brelse(bh);
next_commit_ID++;
continue;
-@@ -543,9 +680,10 @@ static int do_one_pass(journal_t *journa
+@@ -543,9 +680,10 @@
* transaction marks the end of the valid log.
*/
/* 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.16.53-0.16/fs/jbd/journal.c
+Index: linux-2.6.16.60-0.37/fs/jbd/journal.c
===================================================================
---- linux-2.6.16.53-0.16.orig/fs/jbd/journal.c
-+++ linux-2.6.16.53-0.16/fs/jbd/journal.c
-@@ -64,6 +64,7 @@ EXPORT_SYMBOL(journal_update_format);
+--- linux-2.6.16.60-0.37.orig/fs/jbd/journal.c 2009-06-02 23:33:33.000000000 -0600
++++ linux-2.6.16.60-0.37/fs/jbd/journal.c 2009-06-02 23:33:54.000000000 -0600
+@@ -64,6 +64,7 @@
EXPORT_SYMBOL(journal_check_used_features);
EXPORT_SYMBOL(journal_check_available_features);
EXPORT_SYMBOL(journal_set_features);
EXPORT_SYMBOL(journal_create);
EXPORT_SYMBOL(journal_load);
EXPORT_SYMBOL(journal_destroy);
-@@ -1565,6 +1566,33 @@ int journal_set_features (journal_t *jou
+@@ -1565,6 +1566,33 @@
return 1;
}
/**
* int journal_update_format () - Update on-disk journal structure.
-Index: linux-2.6.16.53-0.16/fs/Kconfig
+Index: linux-2.6.16.60-0.37/fs/Kconfig
===================================================================
---- linux-2.6.16.53-0.16.orig/fs/Kconfig
-+++ linux-2.6.16.53-0.16/fs/Kconfig
-@@ -140,6 +140,7 @@ config EXT3_FS_SECURITY
+--- linux-2.6.16.60-0.37.orig/fs/Kconfig 2009-03-24 05:46:35.000000000 -0700
++++ linux-2.6.16.60-0.37/fs/Kconfig 2009-06-02 23:33:54.000000000 -0600
+@@ -140,6 +140,7 @@
config JBD
tristate
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.16.53-0.16/Documentation/filesystems/ext3.txt
+Index: linux-2.6.16.60-0.37/include/linux/jbd.h
+===================================================================
+--- linux-2.6.16.60-0.37.orig/include/linux/jbd.h 2009-06-02 23:33:33.000000000 -0600
++++ linux-2.6.16.60-0.37/include/linux/jbd.h 2009-06-02 23:33:54.000000000 -0600
+@@ -142,6 +142,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
+@@ -228,12 +251,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__
+
+@@ -1041,6 +1068,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);
+ extern void journal_destroy (journal_t *);
+Index: linux-2.6.16.60-0.37/Documentation/filesystems/ext3.txt
===================================================================
---- linux-2.6.16.53-0.16.orig/Documentation/filesystems/ext3.txt
-+++ linux-2.6.16.53-0.16/Documentation/filesystems/ext3.txt
-@@ -14,6 +14,16 @@ Options
+--- linux-2.6.16.60-0.37.orig/Documentation/filesystems/ext3.txt 2006-03-19 22:53:29.000000000 -0700
++++ linux-2.6.16.60-0.37/Documentation/filesystems/ext3.txt 2009-06-02 23:33:54.000000000 -0600
+@@ -14,6 +14,16 @@
When mounting an ext3 filesystem, the following option are accepted:
(*) == default
kernel/sleep_info.c | 392 +++++++++++++++++++++++++++++++++++++++++++++
13 files changed, 560 insertions(+), 15 deletions(-)
-Index: linux-2.6.16.46-0.14/Makefile
+Index: linux-2.6.16.60-0.37/Makefile
===================================================================
---- linux-2.6.16.46-0.14.orig/Makefile 2007-07-18 08:02:30.000000000 +0300
-+++ linux-2.6.16.46-0.14/Makefile 2007-08-30 05:56:23.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/Makefile 2009-03-24 05:46:28.000000000 -0700
++++ linux-2.6.16.60-0.37/Makefile 2009-06-02 23:34:02.000000000 -0600
@@ -493,6 +493,10 @@
CFLAGS += -fomit-frame-pointer
endif
ifdef CONFIG_DEBUG_INFO
CFLAGS += -g
endif
-Index: linux-2.6.16.46-0.14/arch/i386/Kconfig.debug
+Index: linux-2.6.16.60-0.37/arch/i386/Kconfig.debug
===================================================================
---- linux-2.6.16.46-0.14.orig/arch/i386/Kconfig.debug 2007-07-18 08:02:28.000000000 +0300
-+++ linux-2.6.16.46-0.14/arch/i386/Kconfig.debug 2007-08-30 05:56:23.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/arch/i386/Kconfig.debug 2009-03-24 05:46:35.000000000 -0700
++++ linux-2.6.16.60-0.37/arch/i386/Kconfig.debug 2009-06-02 23:34:02.000000000 -0600
@@ -190,4 +190,13 @@
say N then kdb can only be used from a PC (AT) keyboard or a serial
console.
+ N.
+
endmenu
-Index: linux-2.6.16.46-0.14/arch/x86_64/Kconfig.debug
+Index: linux-2.6.16.60-0.37/arch/x86_64/Kconfig.debug
===================================================================
---- linux-2.6.16.46-0.14.orig/arch/x86_64/Kconfig.debug 2007-07-18 08:02:30.000000000 +0300
-+++ linux-2.6.16.46-0.14/arch/x86_64/Kconfig.debug 2007-08-30 05:56:23.000000000 +0300
-@@ -122,6 +122,21 @@
+--- linux-2.6.16.60-0.37.orig/arch/x86_64/Kconfig.debug 2009-03-24 05:46:35.000000000 -0700
++++ linux-2.6.16.60-0.37/arch/x86_64/Kconfig.debug 2009-06-02 23:34:02.000000000 -0600
+@@ -123,6 +123,21 @@
+ If you are not sure, say 0. Read Documentation/kdb/dump.txt before
setting to 2.
-
+config FRAME_POINTER
+ bool "Compile the kernel with frame pointers"
+ help
config IOMMU_DEBUG
depends on GART_IOMMU && DEBUG_KERNEL
bool "Enable IOMMU debugging"
-@@ -148,4 +163,13 @@
+@@ -149,4 +164,13 @@
#config X86_REMOTE_DEBUG
# bool "kgdb debugging stub"
+ N.
+
endmenu
-Index: linux-2.6.16.46-0.14/fs/proc/base.c
+Index: linux-2.6.16.60-0.37/fs/proc/base.c
===================================================================
---- linux-2.6.16.46-0.14.orig/fs/proc/base.c 2007-07-18 08:02:25.000000000 +0300
-+++ linux-2.6.16.46-0.14/fs/proc/base.c 2007-08-30 06:15:24.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/fs/proc/base.c 2009-03-24 05:46:34.000000000 -0700
++++ linux-2.6.16.60-0.37/fs/proc/base.c 2009-06-02 23:34:02.000000000 -0600
@@ -167,7 +167,9 @@
#endif
PROC_TID_OOM_SCORE,
default:
printk("procfs: impossible type (%d)",p->type);
iput(inode);
-Index: linux-2.6.16.46-0.14/fs/proc/proc_misc.c
+Index: linux-2.6.16.60-0.37/fs/proc/proc_misc.c
===================================================================
---- linux-2.6.16.46-0.14.orig/fs/proc/proc_misc.c 2007-07-18 08:02:25.000000000 +0300
-+++ linux-2.6.16.46-0.14/fs/proc/proc_misc.c 2007-08-30 05:56:23.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/fs/proc/proc_misc.c 2009-03-24 05:46:28.000000000 -0700
++++ linux-2.6.16.60-0.37/fs/proc/proc_misc.c 2009-06-02 23:34:02.000000000 -0600
@@ -414,6 +414,11 @@
.release = seq_release,
};
+ create_seq_entry("stacktrace", 0, &proc_global_stack_operations);
+#endif
}
-Index: linux-2.6.16.46-0.14/include/linux/sched.h
+Index: linux-2.6.16.60-0.37/include/linux/sched.h
===================================================================
---- linux-2.6.16.46-0.14.orig/include/linux/sched.h 2007-07-18 08:02:36.000000000 +0300
-+++ linux-2.6.16.46-0.14/include/linux/sched.h 2007-08-30 06:02:43.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/include/linux/sched.h 2009-03-24 05:46:36.000000000 -0700
++++ linux-2.6.16.60-0.37/include/linux/sched.h 2009-06-02 23:34:02.000000000 -0600
@@ -35,6 +35,7 @@
#include <linux/topology.h>
#include <linux/seccomp.h>
#include <linux/rcupdate.h>
+#include <linux/sleep_info.h>
- #include <linux/auxvec.h> /* For AT_VECTOR_SIZE */
-@@ -679,6 +680,8 @@
+ struct exec_domain;
+@@ -700,6 +701,8 @@
unsigned long ttwu_move_affine;
unsigned long ttwu_move_balance;
#endif
};
extern void partition_sched_domains(cpumask_t *partition1,
-Index: linux-2.6.16.46-0.14/include/linux/sleep_info.h
+Index: linux-2.6.16.60-0.37/include/linux/sleep_info.h
===================================================================
---- linux-2.6.16.46-0.14.orig/include/linux/sleep_info.h 2006-06-16 16:07:58.000000000 +0300
-+++ linux-2.6.16.46-0.14/include/linux/sleep_info.h 2007-08-30 05:56:23.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/include/linux/sleep_info.h 2009-05-19 04:30:11.057558880 -0600
++++ linux-2.6.16.60-0.37/include/linux/sleep_info.h 2009-06-02 23:34:02.000000000 -0600
@@ -0,0 +1,50 @@
+#ifndef _LINUX_SLEEP_INFO_H
+#define _LINUX_SLEEP_INFO_H
+
+/* _LINUX_SLEEP_INFO_H */
+#endif
-Index: linux-2.6.16.46-0.14/kernel/Makefile
+Index: linux-2.6.16.60-0.37/kernel/Makefile
===================================================================
---- linux-2.6.16.46-0.14.orig/kernel/Makefile 2007-07-18 08:02:35.000000000 +0300
-+++ linux-2.6.16.46-0.14/kernel/Makefile 2007-08-30 06:12:26.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/kernel/Makefile 2009-03-24 05:46:32.000000000 -0700
++++ linux-2.6.16.60-0.37/kernel/Makefile 2009-06-02 23:34:02.000000000 -0600
@@ -38,6 +38,7 @@
obj-$(CONFIG_TASKSTATS) += taskstats.o tsacct.o
obj-$(CONFIG_PAGG) += pagg.o
ifneq ($(CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER),y)
# According to Alan Modra <alan@linuxcare.com.au>, the -fno-omit-frame-pointer is
-Index: linux-2.6.16.46-0.14/kernel/exit.c
+Index: linux-2.6.16.60-0.37/kernel/exit.c
===================================================================
---- linux-2.6.16.46-0.14.orig/kernel/exit.c 2007-08-30 05:43:46.000000000 +0300
-+++ linux-2.6.16.46-0.14/kernel/exit.c 2007-08-30 06:13:03.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/kernel/exit.c 2009-03-24 05:46:32.000000000 -0700
++++ linux-2.6.16.60-0.37/kernel/exit.c 2009-06-02 23:34:02.000000000 -0600
@@ -39,6 +39,7 @@
#include <linux/mutex.h>
#include <linux/pagg.h>
#include <asm/uaccess.h>
#include <asm/unistd.h>
-@@ -114,6 +115,7 @@
+@@ -119,6 +120,7 @@
write_unlock_irq(&tasklist_lock);
spin_unlock(&p->proc_lock);
proc_pid_flush(proc_dentry);
+ free_sleep_info(&p->sinfo);
release_thread(p);
- put_task_struct(p);
+ call_rcu(&p->rcu, delayed_put_task_struct);
-Index: linux-2.6.16.46-0.14/kernel/fork.c
+Index: linux-2.6.16.60-0.37/kernel/fork.c
===================================================================
---- linux-2.6.16.46-0.14.orig/kernel/fork.c 2007-07-18 08:02:35.000000000 +0300
-+++ linux-2.6.16.46-0.14/kernel/fork.c 2007-08-30 06:13:36.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/kernel/fork.c 2009-03-24 05:46:35.000000000 -0700
++++ linux-2.6.16.60-0.37/kernel/fork.c 2009-06-02 23:34:02.000000000 -0600
@@ -48,6 +48,7 @@
#include <linux/pagg.h>
#include <linux/delayacct.h>
#include <asm/pgtable.h>
#include <asm/pgalloc.h>
-@@ -1222,6 +1223,8 @@
+@@ -1247,6 +1248,8 @@
attach_pid(p, PIDTYPE_TGID, p->tgid);
attach_pid(p, PIDTYPE_PID, p->pid);
nr_threads++;
total_forks++;
spin_unlock(¤t->sighand->siglock);
-Index: linux-2.6.16.46-0.14/kernel/sched.c
+Index: linux-2.6.16.60-0.37/kernel/sched.c
===================================================================
---- linux-2.6.16.46-0.14.orig/kernel/sched.c 2007-08-30 05:43:48.000000000 +0300
-+++ linux-2.6.16.46-0.14/kernel/sched.c 2007-08-30 05:56:23.000000000 +0300
-@@ -2934,6 +2934,8 @@
+--- linux-2.6.16.60-0.37.orig/kernel/sched.c 2009-06-02 23:33:13.000000000 -0600
++++ linux-2.6.16.60-0.37/kernel/sched.c 2009-06-02 23:34:02.000000000 -0600
+@@ -2971,6 +2971,8 @@
}
profile_hit(SCHED_PROFILING, __builtin_return_address(0));
need_resched:
preempt_disable();
prev = current;
-@@ -3136,6 +3138,8 @@
+@@ -3173,6 +3175,8 @@
barrier();
if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
goto need_resched;
}
EXPORT_SYMBOL(preempt_schedule);
-Index: linux-2.6.16.46-0.14/kernel/sleep_info.c
+Index: linux-2.6.16.60-0.37/kernel/sleep_info.c
===================================================================
---- linux-2.6.16.46-0.14.orig/kernel/sleep_info.c 2006-06-16 16:07:58.000000000 +0300
-+++ linux-2.6.16.46-0.14/kernel/sleep_info.c 2007-08-30 05:56:23.000000000 +0300
+--- linux-2.6.16.60-0.37.orig/kernel/sleep_info.c 2009-05-19 04:30:11.057558880 -0600
++++ linux-2.6.16.60-0.37/kernel/sleep_info.c 2009-06-02 23:34:02.000000000 -0600
@@ -0,0 +1,431 @@
+#include <linux/config.h>
+#include <linux/sleep_info.h>
-Index: linux-2.6.18-53.1.21/drivers/scsi/Kconfig
+Index: linux-2.6.16.60-0.37/drivers/scsi/Kconfig
===================================================================
---- linux-2.6.18-53.1.21.orig/drivers/scsi/Kconfig
-+++ linux-2.6.18-53.1.21/drivers/scsi/Kconfig
-@@ -66,6 +66,14 @@ config BLK_DEV_SD
- In this case, do not compile the driver for your SCSI host adapter
- (below) as a module either.
+--- linux-2.6.16.60-0.37.orig/drivers/scsi/Kconfig 2009-03-24 05:46:32.000000000 -0700
++++ linux-2.6.16.60-0.37/drivers/scsi/Kconfig 2009-06-02 23:33:14.000000000 -0600
+@@ -78,6 +78,14 @@
+ To compile this driver as a module, choose M here and read
+ <file:Documentation/scsi/scsi.txt>. The module will be called st.
+config SD_IOSTATS
+ bool "Enable SCSI disk I/O stats"
+ This enables SCSI disk I/O stats collection. You must also enable
+ /proc file system support if you want this feature.
+
- config CHR_DEV_ST
- tristate "SCSI tape support"
- depends on SCSI
-Index: linux-2.6.18-53.1.21/drivers/scsi/scsi_proc.c
+ config CHR_DEV_OSST
+ tristate "SCSI OnStream SC-x0 tape support"
+ depends on SCSI
+Index: linux-2.6.16.60-0.37/drivers/scsi/scsi_proc.c
===================================================================
---- linux-2.6.18-53.1.21.orig/drivers/scsi/scsi_proc.c
-+++ linux-2.6.18-53.1.21/drivers/scsi/scsi_proc.c
+--- linux-2.6.16.60-0.37.orig/drivers/scsi/scsi_proc.c 2009-03-24 05:46:25.000000000 -0700
++++ linux-2.6.16.60-0.37/drivers/scsi/scsi_proc.c 2009-06-02 23:33:14.000000000 -0600
@@ -40,7 +40,8 @@
/* 4K page size, but our output routines, use some slack for overruns */
#define PROC_BLOCK_SIZE (3*1024)
/* Protect sht->present and sht->proc_dir */
static DEFINE_MUTEX(global_host_template_mutex);
-Index: linux-2.6.18-53.1.21/drivers/scsi/sd.c
+Index: linux-2.6.16.60-0.37/drivers/scsi/sd.c
===================================================================
---- linux-2.6.18-53.1.21.orig/drivers/scsi/sd.c
-+++ linux-2.6.18-53.1.21/drivers/scsi/sd.c
-@@ -62,6 +62,63 @@
+--- linux-2.6.16.60-0.37.orig/drivers/scsi/sd.c 2009-03-24 05:46:25.000000000 -0700
++++ linux-2.6.16.60-0.37/drivers/scsi/sd.c 2009-06-02 23:33:14.000000000 -0600
+@@ -63,6 +63,63 @@
#include "scsi_logging.h"
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
-@@ -126,6 +183,9 @@ struct scsi_disk {
+@@ -127,6 +184,9 @@
unsigned WCE : 1; /* state of disk WCE bit */
unsigned RCD : 1; /* state of disk RCD bit, unused */
unsigned DPOFUA : 1; /* state of disk DPOFUA bit */
};
#define to_scsi_disk(obj) container_of(obj,struct scsi_disk,cdev)
-@@ -557,6 +617,8 @@ static int sd_init_command(struct scsi_c
+@@ -520,6 +580,8 @@
*/
SCpnt->done = sd_rw_intr;
/*
* This indicates that the command is ready from our end to be
* queued.
-@@ -1040,6 +1102,7 @@ static void sd_rw_intr(struct scsi_cmnd
+@@ -1014,6 +1076,7 @@
break;
}
out:
scsi_io_completion(SCpnt, good_bytes);
}
-@@ -1735,6 +1798,36 @@ static int sd_probe(struct device *dev)
+@@ -1713,6 +1776,36 @@
if (sdp->removable)
gd->flags |= GENHD_FL_REMOVABLE;
dev_set_drvdata(dev, sdkp);
add_disk(gd);
-@@ -1778,6 +1871,366 @@ static int sd_remove(struct device *dev)
+@@ -1756,6 +1849,366 @@
return 0;
}
/**
* scsi_disk_release - Called to free the scsi_disk structure
* @cdev: pointer to embedded class device
-@@ -1796,10 +2249,16 @@ static void scsi_disk_release(struct cla
+@@ -1774,10 +2227,16 @@
idr_remove(&sd_index_idr, sdkp->index);
spin_unlock(&sd_index_lock);
kfree(sdkp);
}
-@@ -1907,6 +2366,7 @@ done:
+@@ -1844,6 +2303,7 @@
static int __init init_sd(void)
{
int majors = 0, i;
SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
-@@ -1917,9 +2377,13 @@ static int __init init_sd(void)
+@@ -1854,9 +2314,13 @@
if (!majors)
return -ENODEV;
}
/**
-@@ -1938,6 +2402,7 @@ static void __exit exit_sd(void)
+@@ -1875,6 +2339,7 @@
unregister_blkdev(sd_major(i), "sd");
class_unregister(&sd_disk_class);
# when we fix up this lnxmaj/lnxmin/lnxrel business...
#lnxrel="0.33"
# and note that this means we get rid of the EXTRA_VERSION_DELIMITER crap!!
-lnxrel="60-0.33"
+lnxrel="60-0.37_f594963d"
# this is the delimeter that goes between $lnxmaj and $lnxrel
# defaults to "-"
SUPPORTED KERNELS:
2.6-rhel4 RHEL4: 2.6.9-67.0.20.EL
-2.6-sles10 SLES10: 2.6.16.60-0.33
+2.6-sles10 SLES10: 2.6.16.60-0.37
2.6-rhel5 RHEL5: 2.6.18-128.1.1.el5
2.6.18-vanilla kernel.org: 2.6.18.8
2.6.22-vanilla kernel.org: 2.6.22.14