]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Process some of the backlog for the 2.6.19 queue
authorChris Wright <chrisw@sous-sol.org>
Tue, 30 Jan 2007 08:59:51 +0000 (00:59 -0800)
committerChris Wright <chrisw@sous-sol.org>
Tue, 30 Jan 2007 08:59:51 +0000 (00:59 -0800)
20 files changed:
queue-2.6.19/acpi-fix-cpufreq-regression.patch [new file with mode: 0644]
queue-2.6.19/alsa-hda-codec-fix-null-dereference-in-generic-hda-code.patch [new file with mode: 0644]
queue-2.6.19/ctnetlink-check-for-status-attribute-existence-on-conntrack-creation.patch [new file with mode: 0644]
queue-2.6.19/ctnetlink-fix-leak-in-ctnetlink_create_conntrack-error-path.patch [new file with mode: 0644]
queue-2.6.19/elevator-move-clearing-of-unplug-flag-earlier.patch [new file with mode: 0644]
queue-2.6.19/fix-uml-on-non-standard-vm-split-hosts.patch [new file with mode: 0644]
queue-2.6.19/fix-up-cifs-for-test_clear_page_dirty-removal.patch [new file with mode: 0644]
queue-2.6.19/ib-iser-return-error-code-when-pdus-may-not-be-sent.patch [new file with mode: 0644]
queue-2.6.19/ieee1394-sbp2-fix-probing-of-some-dvd-rom-rws.patch [new file with mode: 0644]
queue-2.6.19/ipsec-policy-list-disorder.patch [new file with mode: 0644]
queue-2.6.19/ipv6-mcast-fix-joining-all-node-multicast-group-on-device-initialization.patch [new file with mode: 0644]
queue-2.6.19/netfilter-fix-iptables-abi-breakage-on-cris.patch [new file with mode: 0644]
queue-2.6.19/netlabel-selinux_mls_fix [new file with mode: 0644]
queue-2.6.19/pci-prevent-down_read-when-pci_devices-is-empty.patch [new file with mode: 0644]
queue-2.6.19/revert-fix-up-mmap_kmem.patch [new file with mode: 0644]
queue-2.6.19/sched-tasks-cannot-run-on-cpus-onlined-after-boot.patch [new file with mode: 0644]
queue-2.6.19/series
queue-2.6.19/start_kernel-test-if-irq-s-got-enabled-early-barf-and-disable-them-again.patch [new file with mode: 0644]
queue-2.6.19/sunrpc-give-cloned-rpc-clients-their-own-rpc_pipefs-directory.patch [new file with mode: 0644]
queue-2.6.19/x86-work-around-gcc-4.2-over-aggressive-optimizer.patch [new file with mode: 0644]

diff --git a/queue-2.6.19/acpi-fix-cpufreq-regression.patch b/queue-2.6.19/acpi-fix-cpufreq-regression.patch
new file mode 100644 (file)
index 0000000..c3b449b
--- /dev/null
@@ -0,0 +1,100 @@
+From stable-bounces@linux.kernel.org  Tue Jan 23 08:26:07 2007
+From: Thomas Renninger <trenn@suse.de>
+To: Stable <Stable@kernel.org>
+Date: Tue, 23 Jan 2007 17:16:26 +0100
+Message-Id: <1169568986.18157.194.camel@d36.suse.de>
+Cc: Dave Jones <davej@redhat.com>, mingo@elte.hu, Len Brown <lenb@kernel.org>
+Subject: ACPI: fix cpufreq regression
+
+From: Ingo Molnar <mingo@elte.hu>
+
+recently cpufreq support on my laptop (Lenovo T60) broke completely: 
+when it's plugged into AC it would never go higher than 1 GHz - neither 
+1.3 GHz nor 1.83 GHz is possible - no matter which governor (userspace, 
+speed or ondemand) is used.
+
+after some cpufreq debugging i tracked the regression back to the 
+following (totally correct) bug-fix commit:
+
+   commit 0916bd3ebb7cefdd0f432e8491abe24f4b5a101e
+   Author: Dave Jones <davej@redhat.com>
+   Date:   Wed Nov 22 20:42:01 2006 -0500
+
+    [PATCH] Correct bound checking from the value returned from _PPC method.
+
+this bugfix, which makes other laptops work, made a previously hidden 
+(BIOS) bug visible on my laptop.
+
+The bug is the following: if the _PPC (Performance Present Capabilities) 
+optional ACPI object is queried /after/ bootup then the BIOS reports an 
+incorrect value of '2'.
+
+My laptop (Lenovo T60) has the following performance states supported:
+
+   0: 1833000
+   1: 1333000
+   2: 1000000
+
+Per ACPI specification, a _PPC value of '0' means that all 3 performance 
+states are usable. A _PPC value of '1' means states 1 .. 2 are usable, a 
+value of '2' means only state '2' (slowest) is usable.
+
+now, the _PPC object is optional, and it also comes with notification. 
+Furthermore, when a CPU object is initialized, the _PPC object is 
+initialized as well. So the following evaluation of the _PPC object is 
+superfluous:
+
+ [<c028ba5f>] acpi_processor_get_platform_limit+0xa1/0xaf
+ [<c028c040>] acpi_processor_register_performance+0x3b9/0x3ef
+ [<c0111a85>] acpi_cpufreq_cpu_init+0xb7/0x596
+ [<c03dab74>] cpufreq_add_dev+0x160/0x4a8
+ [<c02bed90>] sysdev_driver_register+0x5a/0xa0
+ [<c03d9c4c>] cpufreq_register_driver+0xb4/0x176
+ [<c068ac08>] acpi_cpufreq_init+0xe5/0xeb
+ [<c010056e>] init+0x14f/0x3dd
+
+and this is the point where my laptop's BIOS returns the incorrect value 
+of '2'. Note that it has not sent any notification event, so the value 
+is probably not really intentional (possibly spurious), and Windows 
+likely doesnt query it after bootup either. Maybe the value is kept at 
+'2' normally, and is only set to the real value when a true asynchronous 
+event (such as AC plug event, battery switch, etc.) occurs.
+
+So i /think/ this is a grey area of the ACPI spec: per the letter of the 
+spec the _PPC value only changes when notified, so there's no reason to 
+query it after the system has booted up. So in my opinion the best (and 
+most compatible) strategy would be to do the change below, and to not 
+evaluate the _PPC object in the acpi_processor_get_performance_info() 
+call, but only evaluate it if _PPC is present during CPU object init, or 
+if it's notified during an asynchronous event. This change is more 
+permissive than the previous logic, so it definitely shouldnt break any 
+existing system.
+
+This also happens to fix my laptop, which is merrily chugging along at 
+1.83 GHz now. Yay!
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Cc: Dave Jones <davej@redhat.com>
+Acked-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+Thomas Renninger <trenn@suse.de> wrote:
+ Beside the Thinkpad it also seems to fix other system:
+ http://bugzilla.kernel.org/show_bug.cgi?id=7859
+
+ drivers/acpi/processor_perflib.c |    4 ----
+ 1 file changed, 4 deletions(-)
+
+--- linux-2.6.19.2.orig/drivers/acpi/processor_perflib.c
++++ linux-2.6.19.2/drivers/acpi/processor_perflib.c
+@@ -322,10 +322,6 @@ static int acpi_processor_get_performanc
+       if (result)
+               return result;
+-      result = acpi_processor_get_platform_limit(pr);
+-      if (result)
+-              return result;
+-
+       return 0;
+ }
diff --git a/queue-2.6.19/alsa-hda-codec-fix-null-dereference-in-generic-hda-code.patch b/queue-2.6.19/alsa-hda-codec-fix-null-dereference-in-generic-hda-code.patch
new file mode 100644 (file)
index 0000000..1030cb5
--- /dev/null
@@ -0,0 +1,36 @@
+From stable-bounces@linux.kernel.org  Thu Jan 18 06:36:00 2007
+Date: Thu, 18 Jan 2007 15:25:31 +0100
+Message-ID: <s5hodowxvhg.wl%tiwai@suse.de>
+From: Takashi Iwai <tiwai@suse.de>
+To: stable@kernel.org
+Subject: ALSA hda-codec - Fix NULL dereference in generic hda code
+
+Fix NULL dereference in hda_generic.c.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Jaroslav Kysela <perex@suse.cz>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+commit 6afeb11de5b28e47adea1459c35e598bb98424d6
+tree 07f4dba0e2fb094b448eb9863de7b6364b768add
+parent f9cc8a8b1887e6e2bb430405d0a4f9b5fb39fa5d
+author Takashi Iwai <tiwai@suse.de> Mon, 18 Dec 2006 16:16:04 +0100
+committer Jaroslav Kysela <perex@suse.cz> Tue, 09 Jan 2007 09:06:17 +0100
+
+ sound/pci/hda/hda_generic.c |    5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- linux-2.6.19.2.orig/sound/pci/hda/hda_generic.c
++++ linux-2.6.19.2/sound/pci/hda/hda_generic.c
+@@ -485,8 +485,9 @@ static const char *get_input_type(struct
+                       return "Front Aux";
+               return "Aux";
+       case AC_JACK_MIC_IN:
+-              if (node->pin_caps &
+-                  (AC_PINCAP_VREF_80 << AC_PINCAP_VREF_SHIFT))
++              if (pinctl &&
++                  (node->pin_caps &
++                   (AC_PINCAP_VREF_80 << AC_PINCAP_VREF_SHIFT)))
+                       *pinctl |= AC_PINCTL_VREF_80;
+               if ((location & 0x0f) == AC_JACK_LOC_FRONT)
+                       return "Front Mic";
diff --git a/queue-2.6.19/ctnetlink-check-for-status-attribute-existence-on-conntrack-creation.patch b/queue-2.6.19/ctnetlink-check-for-status-attribute-existence-on-conntrack-creation.patch
new file mode 100644 (file)
index 0000000..a098e92
--- /dev/null
@@ -0,0 +1,59 @@
+From stable-bounces@linux.kernel.org  Mon Jan 15 01:37:11 2007
+From: Patrick McHardy <kaber@trash.net>
+To: stable@kernel.org
+Message-Id: <20070115092826.23343.50962.sendpatchset@localhost.localdomain>
+Date: Mon, 15 Jan 2007 10:28:27 +0100 (MET)
+Cc: netfilter-devel@lists.netfilter.org, Patrick McHardy <kaber@trash.net>, davem@davemloft.net
+Subject: [NETFILTER]: ctnetlink: check for status attribute existence on conntrack creation
+
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+
+Check that status flags are available in the netlink message received
+to create a new conntrack.
+
+Fixes a crash in ctnetlink_create_conntrack when the CTA_STATUS attribute
+is not present.
+
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ net/ipv4/netfilter/ip_conntrack_netlink.c |    8 +++++---
+ net/netfilter/nf_conntrack_netlink.c      |    8 +++++---
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+--- linux-2.6.19.2.orig/net/ipv4/netfilter/ip_conntrack_netlink.c
++++ linux-2.6.19.2/net/ipv4/netfilter/ip_conntrack_netlink.c
+@@ -946,9 +946,11 @@ ctnetlink_create_conntrack(struct nfattr
+       ct->timeout.expires = jiffies + ct->timeout.expires * HZ;
+       ct->status |= IPS_CONFIRMED;
+-      err = ctnetlink_change_status(ct, cda);
+-      if (err < 0)
+-              goto err;
++      if (cda[CTA_STATUS-1]) {
++              err = ctnetlink_change_status(ct, cda);
++              if (err < 0)
++                      goto err;
++      }
+       if (cda[CTA_PROTOINFO-1]) {
+               err = ctnetlink_change_protoinfo(ct, cda);
+--- linux-2.6.19.2.orig/net/netfilter/nf_conntrack_netlink.c
++++ linux-2.6.19.2/net/netfilter/nf_conntrack_netlink.c
+@@ -963,9 +963,11 @@ ctnetlink_create_conntrack(struct nfattr
+       ct->timeout.expires = jiffies + ct->timeout.expires * HZ;
+       ct->status |= IPS_CONFIRMED;
+-      err = ctnetlink_change_status(ct, cda);
+-      if (err < 0)
+-              goto err;
++      if (cda[CTA_STATUS-1]) {
++              err = ctnetlink_change_status(ct, cda);
++              if (err < 0)
++                      goto err;
++      }
+       if (cda[CTA_PROTOINFO-1]) {
+               err = ctnetlink_change_protoinfo(ct, cda);
diff --git a/queue-2.6.19/ctnetlink-fix-leak-in-ctnetlink_create_conntrack-error-path.patch b/queue-2.6.19/ctnetlink-fix-leak-in-ctnetlink_create_conntrack-error-path.patch
new file mode 100644 (file)
index 0000000..09b53f7
--- /dev/null
@@ -0,0 +1,38 @@
+From stable-bounces@linux.kernel.org  Mon Jan 15 01:37:04 2007
+From: Patrick McHardy <kaber@trash.net>
+To: stable@kernel.org
+Message-Id: <20070115092828.23343.32771.sendpatchset@localhost.localdomain>
+Date: Mon, 15 Jan 2007 10:28:28 +0100 (MET)
+Cc: netfilter-devel@lists.netfilter.org, Patrick McHardy <kaber@trash.net>, davem@davemloft.net
+Subject: [NETFILTER]: ctnetlink: fix leak in ctnetlink_create_conntrack error path
+
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ net/ipv4/netfilter/ip_conntrack_netlink.c |    2 +-
+ net/netfilter/nf_conntrack_netlink.c      |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.19.2.orig/net/ipv4/netfilter/ip_conntrack_netlink.c
++++ linux-2.6.19.2/net/ipv4/netfilter/ip_conntrack_netlink.c
+@@ -955,7 +955,7 @@ ctnetlink_create_conntrack(struct nfattr
+       if (cda[CTA_PROTOINFO-1]) {
+               err = ctnetlink_change_protoinfo(ct, cda);
+               if (err < 0)
+-                      return err;
++                      goto err;
+       }
+ #if defined(CONFIG_IP_NF_CONNTRACK_MARK)
+--- linux-2.6.19.2.orig/net/netfilter/nf_conntrack_netlink.c
++++ linux-2.6.19.2/net/netfilter/nf_conntrack_netlink.c
+@@ -972,7 +972,7 @@ ctnetlink_create_conntrack(struct nfattr
+       if (cda[CTA_PROTOINFO-1]) {
+               err = ctnetlink_change_protoinfo(ct, cda);
+               if (err < 0)
+-                      return err;
++                      goto err;
+       }
+ #if defined(CONFIG_NF_CONNTRACK_MARK)
diff --git a/queue-2.6.19/elevator-move-clearing-of-unplug-flag-earlier.patch b/queue-2.6.19/elevator-move-clearing-of-unplug-flag-earlier.patch
new file mode 100644 (file)
index 0000000..39f6b9c
--- /dev/null
@@ -0,0 +1,56 @@
+From 95543179f158b4891c5dc49004853ce081e8d794 Mon Sep 17 00:00:00 2001
+From: Linas Vepstas <linas@austin.ibm.com>
+Date: Tue, 23 Jan 2007 19:40:54 +0100
+Subject: elevator: move clearing of unplug flag earlier
+
+A flag was recently added to the elevator code to avoid
+performing an unplug when reuests are being re-queued.
+The goal of this flag was to avoid a deep recursion that
+can occur when re-queueing requests after a SCSI device/host
+reset.  See http://lkml.org/lkml/2006/5/17/254
+
+However, that fix added the flag near the bottom of a case
+statement, where an earlier break (in an if statement) could
+transport one out of the case, without setting the flag.
+This patch sets the flag earlier in the case statement.
+
+I re-discovered the deep recursion recently during testing;
+I was told that it was a known problem, and the fix to it was
+in the kernel I was testing. Indeed it was ... but it didn't
+fix the bug. With the patch below, I no longer see the bug.
+
+Signed-off by: Linas Vepstas <linas@austin.ibm.com>
+Signed-off-by: Jens Axboe <axboe@suse.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ block/elevator.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- linux-2.6.19.2.orig/block/elevator.c
++++ linux-2.6.19.2/block/elevator.c
+@@ -572,6 +572,12 @@ void elv_insert(request_queue_t *q, stru
+                */
+               rq->cmd_flags |= REQ_SOFTBARRIER;
++              /*
++               * Most requeues happen because of a busy condition,
++               * don't force unplug of the queue for that case.
++               */
++              unplug_it = 0;
++
+               if (q->ordseq == 0) {
+                       list_add(&rq->queuelist, &q->queue_head);
+                       break;
+@@ -586,11 +592,6 @@ void elv_insert(request_queue_t *q, stru
+               }
+               list_add_tail(&rq->queuelist, pos);
+-              /*
+-               * most requeues happen because of a busy condition, don't
+-               * force unplug of the queue for that case.
+-               */
+-              unplug_it = 0;
+               break;
+       default:
diff --git a/queue-2.6.19/fix-uml-on-non-standard-vm-split-hosts.patch b/queue-2.6.19/fix-uml-on-non-standard-vm-split-hosts.patch
new file mode 100644 (file)
index 0000000..9eb9161
--- /dev/null
@@ -0,0 +1,81 @@
+From stable-bounces@linux.kernel.org  Mon Jan 22 12:54:42 2007
+Message-Id: <200701222038.l0MKcSnJ005215@ccure.user-mode-linux.org>
+To: akpm@osdl.org, stable@kernel.org
+Date: Mon, 22 Jan 2007 15:38:27 -0500
+From: Jeff Dike <jdike@addtoit.com>
+Cc: Blaisorblade <blaisorblade@yahoo.it>, Pravin <shindepravin@gmail.com>, uml@flonatel.org
+Subject: Fix UML on non-standard VM split hosts
+
+This fixes UML on hosts with non-standard VM splits.  We had changed
+the config variable that controls UML behavior on such hosts, but not
+propogated the change everywhere.  In particular, the values of
+STUB_CODE and STUB_DATA relied on the old variable.
+
+I also reformatted the HOST_VMSPLIT_3G help to make it more standard.
+
+Spotted by uml@flonatel.org.
+
+Signed-off-by: Jeff Dike <jdike@addtoit.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+--
+ arch/um/Kconfig.i386 |   38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+--- linux-2.6.19.2.orig/arch/um/Kconfig.i386
++++ linux-2.6.19.2/arch/um/Kconfig.i386
+@@ -19,22 +19,22 @@ config SEMAPHORE_SLEEPERS
+ choice
+       prompt "Host memory split"
+       default HOST_VMSPLIT_3G
+-      ---help---
+-         This is needed when the host kernel on which you run has a non-default
+-         (like 2G/2G) memory split, instead of the customary 3G/1G. If you did
+-         not recompile your own kernel but use the default distro's one, you can
+-         safely accept the "Default split" option.
+-
+-         It can be enabled on recent (>=2.6.16-rc2) vanilla kernels via
+-         CONFIG_VM_SPLIT_*, or on previous kernels with special patches (-ck
+-         patchset by Con Kolivas, or other ones) - option names match closely the
+-         host CONFIG_VM_SPLIT_* ones.
+-
+-         A lower setting (where 1G/3G is lowest and 3G/1G is higher) will
+-         tolerate even more "normal" host kernels, but an higher setting will be
+-         stricter.
++      help
++        This is needed when the host kernel on which you run has a non-default
++      (like 2G/2G) memory split, instead of the customary 3G/1G. If you did
++      not recompile your own kernel but use the default distro's one, you can
++      safely accept the "Default split" option.
++
++      It can be enabled on recent (>=2.6.16-rc2) vanilla kernels via
++      CONFIG_VM_SPLIT_*, or on previous kernels with special patches (-ck
++      patchset by Con Kolivas, or other ones) - option names match closely the
++      host CONFIG_VM_SPLIT_* ones.
++
++      A lower setting (where 1G/3G is lowest and 3G/1G is higher) will
++      tolerate even more "normal" host kernels, but an higher setting will be
++      stricter.
+-         So, if you do not know what to do here, say 'Default split'.
++      So, if you do not know what to do here, say 'Default split'.
+       config HOST_VMSPLIT_3G
+               bool "Default split (3G/1G user/kernel host split)"
+@@ -67,13 +67,13 @@ config 3_LEVEL_PGTABLES
+ config STUB_CODE
+       hex
+-      default 0xbfffe000 if !HOST_2G_2G
+-      default 0x7fffe000 if HOST_2G_2G
++      default 0xbfffe000 if !HOST_VMSPLIT_2G
++      default 0x7fffe000 if HOST_VMSPLIT_2G
+ config STUB_DATA
+       hex
+-      default 0xbffff000 if !HOST_2G_2G
+-      default 0x7ffff000 if HOST_2G_2G
++      default 0xbffff000 if !HOST_VMSPLIT_2G
++      default 0x7ffff000 if HOST_VMSPLIT_2G
+ config STUB_START
+       hex
diff --git a/queue-2.6.19/fix-up-cifs-for-test_clear_page_dirty-removal.patch b/queue-2.6.19/fix-up-cifs-for-test_clear_page_dirty-removal.patch
new file mode 100644 (file)
index 0000000..2677d86
--- /dev/null
@@ -0,0 +1,86 @@
+From stable-bounces@linux.kernel.org  Thu Jan 11 07:26:45 2007
+Message-ID: <45A655AA.3070301@gentoo.org>
+Date: Thu, 11 Jan 2007 10:20:10 -0500
+From: Daniel Drake <dsd@gentoo.org>
+To: stable@kernel.org
+Cc: torvalds@osdl.org
+Subject: Fix up CIFS for "test_clear_page_dirty()" removal
+
+From: Linus Torvalds <torvalds@osdl.org>
+
+Fix up CIFS for "test_clear_page_dirty()" removal
+
+This also adds he required page "writeback" flag handling, that cifs
+hasn't been doing and that the page dirty flag changes made obvious.
+
+Acked-by: Steve French <smfltc@us.ibm.com>
+Acked-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+This fixes a long term corruption bug when copying large files to a CIFS 
+mount. Thanks Linus!
+
+---
+ fs/cifs/file.c |   26 +++++++++++++++++++++++---
+ 1 file changed, 23 insertions(+), 3 deletions(-)
+
+--- linux-2.6.19.2.orig/fs/cifs/file.c
++++ linux-2.6.19.2/fs/cifs/file.c
+@@ -1244,14 +1244,21 @@ retry:
+                               wait_on_page_writeback(page);
+                       if (PageWriteback(page) ||
+-                                      !test_clear_page_dirty(page)) {
++                                      !clear_page_dirty_for_io(page)) {
+                               unlock_page(page);
+                               break;
+                       }
++                      /*
++                       * This actually clears the dirty bit in the radix tree.
++                       * See cifs_writepage() for more commentary.
++                       */
++                      set_page_writeback(page);
++
+                       if (page_offset(page) >= mapping->host->i_size) {
+                               done = 1;
+                               unlock_page(page);
++                              end_page_writeback(page);
+                               break;
+                       }
+@@ -1315,6 +1322,7 @@ retry:
+                                       SetPageError(page);
+                               kunmap(page);
+                               unlock_page(page);
++                              end_page_writeback(page);
+                               page_cache_release(page);
+                       }
+                       if ((wbc->nr_to_write -= n_iov) <= 0)
+@@ -1351,11 +1359,23 @@ static int cifs_writepage(struct page* p
+         if (!PageUptodate(page)) {
+               cFYI(1, ("ppw - page not up to date"));
+       }
+-      
++
++      /*
++       * Set the "writeback" flag, and clear "dirty" in the radix tree.
++       *
++       * A writepage() implementation always needs to do either this,
++       * or re-dirty the page with "redirty_page_for_writepage()" in
++       * the case of a failure.
++       *
++       * Just unlocking the page will cause the radix tree tag-bits
++       * to fail to update with the state of the page correctly.
++       */
++      set_page_writeback(page);               
+       rc = cifs_partialpagewrite(page, 0, PAGE_CACHE_SIZE);
+       SetPageUptodate(page); /* BB add check for error and Clearuptodate? */
+       unlock_page(page);
+-      page_cache_release(page);       
++      end_page_writeback(page);
++      page_cache_release(page);
+       FreeXid(xid);
+       return rc;
+ }
diff --git a/queue-2.6.19/ib-iser-return-error-code-when-pdus-may-not-be-sent.patch b/queue-2.6.19/ib-iser-return-error-code-when-pdus-may-not-be-sent.patch
new file mode 100644 (file)
index 0000000..1dc4495
--- /dev/null
@@ -0,0 +1,120 @@
+From stable-bounces@linux.kernel.org  Mon Jan 22 05:13:24 2007
+Message-ID: <45B4B639.2010702@voltaire.com>
+Date: Mon, 22 Jan 2007 15:03:53 +0200
+From: Erez Zilber <erezz@voltaire.com>
+To: stable@kernel.org
+Cc: Roland Dreier <rdreier@cisco.com>, Mike Christie <michaelc@cs.wisc.edu>
+Subject: IB/iser: return error code when PDUs may not be sent
+
+iSER limits the number of outstanding PDUs to send. When this threshold is
+reached, it should return an error code (-ENOBUFS) instead of setting the
+suspend_tx bit (which should be used only by libiscsi). Without this fix, 
+during logout, open-iscsi over iSER tries to logout forever.
+
+Signed-off-by: Erez Zilber <erezz@voltaire.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/infiniband/ulp/iser/iscsi_iser.c     |    4 ++--
+ drivers/infiniband/ulp/iser/iser_initiator.c |   26 ++++++++++++--------------
+ 2 files changed, 14 insertions(+), 16 deletions(-)
+
+--- linux-2.6.19.2.orig/drivers/infiniband/ulp/iser/iscsi_iser.c
++++ linux-2.6.19.2/drivers/infiniband/ulp/iser/iscsi_iser.c
+@@ -177,7 +177,7 @@ iscsi_iser_mtask_xmit(struct iscsi_conn 
+        * - if yes, the mtask is recycled at iscsi_complete_pdu
+        * - if no,  the mtask is recycled at iser_snd_completion
+        */
+-      if (error && error != -EAGAIN)
++      if (error && error != -ENOBUFS)
+               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+       return error;
+@@ -241,7 +241,7 @@ iscsi_iser_ctask_xmit(struct iscsi_conn 
+               error = iscsi_iser_ctask_xmit_unsol_data(conn, ctask);
+  iscsi_iser_ctask_xmit_exit:
+-      if (error && error != -EAGAIN)
++      if (error && error != -ENOBUFS)
+               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+       return error;
+ }
+--- linux-2.6.19.2.orig/drivers/infiniband/ulp/iser/iser_initiator.c
++++ linux-2.6.19.2/drivers/infiniband/ulp/iser/iser_initiator.c
+@@ -304,18 +304,14 @@ int iser_conn_set_full_featured_mode(str
+ static int
+ iser_check_xmit(struct iscsi_conn *conn, void *task)
+ {
+-      int rc = 0;
+       struct iscsi_iser_conn *iser_conn = conn->dd_data;
+-      write_lock_bh(conn->recv_lock);
+       if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
+           ISER_QP_MAX_REQ_DTOS) {
+-              iser_dbg("%ld can't xmit task %p, suspending tx\n",jiffies,task);
+-              set_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
+-              rc = -EAGAIN;
++              iser_dbg("%ld can't xmit task %p\n",jiffies,task);
++              return -ENOBUFS;
+       }
+-      write_unlock_bh(conn->recv_lock);
+-      return rc;
++      return 0;
+ }
+@@ -340,7 +336,7 @@ int iser_send_command(struct iscsi_conn 
+               return -EPERM;
+       }
+       if (iser_check_xmit(conn, ctask))
+-              return -EAGAIN;
++              return -ENOBUFS;
+       edtl = ntohl(hdr->data_length);
+@@ -426,7 +422,7 @@ int iser_send_data_out(struct iscsi_conn
+       }
+       if (iser_check_xmit(conn, ctask))
+-              return -EAGAIN;
++              return -ENOBUFS;
+       itt = ntohl(hdr->itt);
+       data_seg_len = ntoh24(hdr->dlength);
+@@ -500,7 +496,7 @@ int iser_send_control(struct iscsi_conn 
+       }
+       if (iser_check_xmit(conn,mtask))
+-              return -EAGAIN;
++              return -ENOBUFS;
+       /* build the tx desc regd header and add it to the tx desc dto */
+       mdesc->type = ISCSI_TX_CONTROL;
+@@ -609,6 +605,7 @@ void iser_snd_completion(struct iser_des
+       struct iscsi_iser_conn *iser_conn = ib_conn->iser_conn;
+       struct iscsi_conn      *conn = iser_conn->iscsi_conn;
+       struct iscsi_mgmt_task *mtask;
++      int resume_tx = 0;
+       iser_dbg("Initiator, Data sent dto=0x%p\n", dto);
+@@ -617,15 +614,16 @@ void iser_snd_completion(struct iser_des
+       if (tx_desc->type == ISCSI_TX_DATAOUT)
+               kmem_cache_free(ig.desc_cache, tx_desc);
++      if (atomic_read(&iser_conn->ib_conn->post_send_buf_count) ==
++          ISER_QP_MAX_REQ_DTOS)
++              resume_tx = 1;
++
+       atomic_dec(&ib_conn->post_send_buf_count);
+-      write_lock(conn->recv_lock);
+-      if (conn->suspend_tx) {
++      if (resume_tx) {
+               iser_dbg("%ld resuming tx\n",jiffies);
+-              clear_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx);
+               scsi_queue_work(conn->session->host, &conn->xmitwork);
+       }
+-      write_unlock(conn->recv_lock);
+       if (tx_desc->type == ISCSI_TX_CONTROL) {
+               /* this arithmetic is legal by libiscsi dd_data allocation */
diff --git a/queue-2.6.19/ieee1394-sbp2-fix-probing-of-some-dvd-rom-rws.patch b/queue-2.6.19/ieee1394-sbp2-fix-probing-of-some-dvd-rom-rws.patch
new file mode 100644 (file)
index 0000000..e027241
--- /dev/null
@@ -0,0 +1,38 @@
+From stable-bounces@linux.kernel.org  Wed Jan 10 23:58:55 2007
+Date: Thu, 11 Jan 2007 08:50:27 +0100 (CET)
+From: Stefan Richter <stefanr@s5r6.in-berlin.de>
+To: stable@kernel.org
+Message-ID: <tkrat.d4c825f325c015da@s5r6.in-berlin.de>
+Subject: ieee1394: sbp2: fix probing of some DVD-ROM/RWs
+
+Since commit 98e238cd42be6c0852da519303cf0182690f8d9f in Linux 2.6.19,
+"ieee1394: sbp2: don't prefer MODE SENSE 10", some FireWire DVD-ROMs and
+DVD-RWs were mistaken as CD-ROM because sr_mod now sent MODE SENSE 6.
+The MMC command set includes only MODE SENSE 10.
+http://bugzilla.kernel.org/show_bug.cgi?id=7800
+
+This fix lets sbp2 switch scsi_device.use_10_for_rw on for MMC LUs.
+This should rather be done in the command set driver sr_mod, not in the
+sbp2 transport driver, and an according patch will follow for a next
+Linux release.
+
+Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+same as commit 1a74bc68e4c0534d150e6454b45a70dab831fa32
+
+---
+ drivers/ieee1394/sbp2.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- linux-2.6.19.2.orig/drivers/ieee1394/sbp2.c
++++ linux-2.6.19.2/drivers/ieee1394/sbp2.c
+@@ -2530,6 +2530,8 @@ static int sbp2scsi_slave_configure(stru
+       blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
+       sdev->use_10_for_rw = 1;
++      if (sdev->type == TYPE_ROM)
++              sdev->use_10_for_ms = 1;
+       if (sdev->type == TYPE_DISK &&
+           scsi_id->workarounds & SBP2_WORKAROUND_MODE_SENSE_8)
+               sdev->skip_ms_page_8 = 1;
diff --git a/queue-2.6.19/ipsec-policy-list-disorder.patch b/queue-2.6.19/ipsec-policy-list-disorder.patch
new file mode 100644 (file)
index 0000000..d38d76d
--- /dev/null
@@ -0,0 +1,67 @@
+From stable-bounces@linux.kernel.org  Tue Jan 16 18:44:13 2007
+Date: Wed, 17 Jan 2007 13:35:01 +1100
+From: Herbert Xu <herbert@gondor.apana.org.au>
+To: David Miller <davem@davemloft.net>, stable@kernel.org
+Message-ID: <20070117023501.GA23015@gondor.apana.org.au>
+Cc: pupilla@hotmail.com
+Subject: IPSEC: Policy list disorder
+
+The recent hashing introduced an off-by-one bug in policy list insertion.
+Instead of adding after the last entry with a lesser or equal priority,
+we're adding after the successor of that entry.
+
+This patch fixes this and also adds a warning if we detect a duplicate
+entry in the policy list.  This should never happen due to this if clause.
+
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ net/xfrm/xfrm_policy.c |   16 +++++-----------
+ 1 file changed, 5 insertions(+), 11 deletions(-)
+
+--- linux-2.6.19.2.orig/net/xfrm/xfrm_policy.c
++++ linux-2.6.19.2/net/xfrm/xfrm_policy.c
+@@ -615,19 +615,18 @@ int xfrm_policy_insert(int dir, struct x
+       struct xfrm_policy *pol;
+       struct xfrm_policy *delpol;
+       struct hlist_head *chain;
+-      struct hlist_node *entry, *newpos, *last;
++      struct hlist_node *entry, *newpos;
+       struct dst_entry *gc_list;
+       write_lock_bh(&xfrm_policy_lock);
+       chain = policy_hash_bysel(&policy->selector, policy->family, dir);
+       delpol = NULL;
+       newpos = NULL;
+-      last = NULL;
+       hlist_for_each_entry(pol, entry, chain, bydst) {
+-              if (!delpol &&
+-                  pol->type == policy->type &&
++              if (pol->type == policy->type &&
+                   !selector_cmp(&pol->selector, &policy->selector) &&
+-                  xfrm_sec_ctx_match(pol->security, policy->security)) {
++                  xfrm_sec_ctx_match(pol->security, policy->security) &&
++                  !WARN_ON(delpol)) {
+                       if (excl) {
+                               write_unlock_bh(&xfrm_policy_lock);
+                               return -EEXIST;
+@@ -636,17 +635,12 @@ int xfrm_policy_insert(int dir, struct x
+                       if (policy->priority > pol->priority)
+                               continue;
+               } else if (policy->priority >= pol->priority) {
+-                      last = &pol->bydst;
++                      newpos = &pol->bydst;
+                       continue;
+               }
+-              if (!newpos)
+-                      newpos = &pol->bydst;
+               if (delpol)
+                       break;
+-              last = &pol->bydst;
+       }
+-      if (!newpos)
+-              newpos = last;
+       if (newpos)
+               hlist_add_after(newpos, &policy->bydst);
+       else
diff --git a/queue-2.6.19/ipv6-mcast-fix-joining-all-node-multicast-group-on-device-initialization.patch b/queue-2.6.19/ipv6-mcast-fix-joining-all-node-multicast-group-on-device-initialization.patch
new file mode 100644 (file)
index 0000000..b34f9b6
--- /dev/null
@@ -0,0 +1,64 @@
+From stable-bounces@linux.kernel.org  Mon Jan 15 15:55:00 2007
+Date: Mon, 15 Jan 2007 03:56:01 +0900 (JST)
+Message-Id: <20070115.035601.10978849.yoshfuji@linux-ipv6.org>
+To: davem@davemloft.net
+From: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
+Cc: yoshfuji@linux-ipv6.org, davem@davemloft.net, gernoth@informatik.uni-erlangen.de
+Subject: IPV6 MCAST: Fix joining all-node multicast group on device initialization.
+
+Join all-node multicast group after assignment of dev->ip6_ptr
+because it must be assigned when ipv6_dev_mc_inc() is called.
+This fixes Bug#7817, reported by <gernoth@informatik.uni-erlangen.de>.
+
+Closes: 7817
+Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ net/ipv6/addrconf.c |    6 ++++++
+ net/ipv6/mcast.c    |    6 ------
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+--- linux-2.6.19.2.orig/net/ipv6/addrconf.c
++++ linux-2.6.19.2/net/ipv6/addrconf.c
+@@ -341,6 +341,7 @@ void in6_dev_finish_destroy(struct inet6
+ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
+ {
+       struct inet6_dev *ndev;
++      struct in6_addr maddr;
+       ASSERT_RTNL();
+@@ -425,6 +426,11 @@ static struct inet6_dev * ipv6_add_dev(s
+ #endif
+       /* protected by rtnl_lock */
+       rcu_assign_pointer(dev->ip6_ptr, ndev);
++
++      /* Join all-node multicast group */
++      ipv6_addr_all_nodes(&maddr);
++      ipv6_dev_mc_inc(dev, &maddr);
++
+       return ndev;
+ }
+--- linux-2.6.19.2.orig/net/ipv6/mcast.c
++++ linux-2.6.19.2/net/ipv6/mcast.c
+@@ -2252,8 +2252,6 @@ void ipv6_mc_up(struct inet6_dev *idev)
+ void ipv6_mc_init_dev(struct inet6_dev *idev)
+ {
+-      struct in6_addr maddr;
+-
+       write_lock_bh(&idev->lock);
+       rwlock_init(&idev->mc_lock);
+       idev->mc_gq_running = 0;
+@@ -2269,10 +2267,6 @@ void ipv6_mc_init_dev(struct inet6_dev *
+       idev->mc_maxdelay = IGMP6_UNSOLICITED_IVAL;
+       idev->mc_v1_seen = 0;
+       write_unlock_bh(&idev->lock);
+-
+-      /* Add all-nodes address. */
+-      ipv6_addr_all_nodes(&maddr);
+-      ipv6_dev_mc_inc(idev->dev, &maddr);
+ }
+ /*
diff --git a/queue-2.6.19/netfilter-fix-iptables-abi-breakage-on-cris.patch b/queue-2.6.19/netfilter-fix-iptables-abi-breakage-on-cris.patch
new file mode 100644 (file)
index 0000000..b399ca2
--- /dev/null
@@ -0,0 +1,43 @@
+From stable-bounces@linux.kernel.org  Wed Jan 24 08:56:59 2007
+Message-ID: <45B78D6F.9000600@trash.net>
+Date: Wed, 24 Jan 2007 17:46:39 +0100
+From: Patrick McHardy <kaber@trash.net>
+To: stable@kernel.org
+Cc: Netfilter Development Mailinglist <netfilter-devel@lists.netfilter.org>, "David S. Miller" <davem@davemloft.net>
+Subject: NETFILTER: Fix iptables ABI breakage on (at least) CRIS
+
+With the introduction of x_tables we accidentally broke compatibility
+by defining IPT_TABLE_MAXNAMELEN to XT_FUNCTION_MAXNAMELEN instead of
+XT_TABLE_MAXNAMELEN, which is two bytes larger.
+
+On most architectures it doesn't really matter since we don't have
+any tables with names that long in the kernel and the structure
+layout didn't change because of alignment requirements of following
+members. On CRIS however (and other architectures that don't align
+data) this changed the structure layout and thus broke compatibility
+with old iptables binaries.
+
+Changing it back will break compatibility with binaries compiled
+against recent kernels again, but since the breakage has only been
+there for three releases this seems like the better choice.
+
+Spotted by Jonas Berlin <xkr47@outerspace.dyndns.org>.
+
+Signed-off-by: Patrick McHardy <kaber@trash.net>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ include/linux/netfilter_ipv4/ip_tables.h |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.19.2.orig/include/linux/netfilter_ipv4/ip_tables.h
++++ linux-2.6.19.2/include/linux/netfilter_ipv4/ip_tables.h
+@@ -28,7 +28,7 @@
+ #include <linux/netfilter/x_tables.h>
+ #define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+-#define IPT_TABLE_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
++#define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
+ #define ipt_match xt_match
+ #define ipt_target xt_target
+ #define ipt_table xt_table
diff --git a/queue-2.6.19/netlabel-selinux_mls_fix b/queue-2.6.19/netlabel-selinux_mls_fix
new file mode 100644 (file)
index 0000000..0b39fd0
--- /dev/null
@@ -0,0 +1,48 @@
+From stable-bounces@linux.kernel.org  Fri Jan 19 11:37:48 2007
+From: "Paul Moore" <paul.moore@hp.com>
+Message-Id: <20070119192611.362068337@hp.com>
+Date: Fri, 19 Jan 2007 14:25:50 -0500
+To: stable@kernel.org
+Cc: antoine@nagafix.co.uk, sds@tycho.nsa.gov, jmorris@namei.org
+Subject: SELinux: fix an oops with NetLabel and non-MLS SELinux policy
+
+In the case where a user has configured NetLabel in the kernel but is not
+using a SELinux policy with the MLS/MCS feature enabled there is a bug in
+mls_export_cat() where a NULL pointer is used.  The initial problem report and
+discussion can be found here (this patch has been ACK'd by Stephen Smalley and
+ James Morris in the discussion thread below):
+
+ * http://marc2.theaimsgroup.com/?t=116920302500004&r=1&w=2
+
+This patch is specific to the 2.6.19.y kernel series as the mls_export_cat()
+function has been replaced in the 2.6.20 kernel.
+
+Signed-off-by: Paul Moore <paul.moore@hp.com>
+Acked-by:  Stephen Smalley <sds@tycho.nsa.gov>
+Acked-by: James Morris <jmorris@namei.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ security/selinux/ss/mls.c |   12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+--- linux-2.6.19.2.orig/security/selinux/ss/mls.c
++++ linux-2.6.19.2/security/selinux/ss/mls.c
+@@ -641,10 +641,14 @@ int mls_export_cat(const struct context 
+       int rc = -EPERM;
+       if (!selinux_mls_enabled) {
+-              *low = NULL;
+-              *low_len = 0;
+-              *high = NULL;
+-              *high_len = 0;
++              if (low != NULL) {
++                      *low = NULL;
++                      *low_len = 0;
++              }
++              if (high != NULL) {
++                      *high = NULL;
++                      *high_len = 0;
++              }
+               return 0;
+       }
diff --git a/queue-2.6.19/pci-prevent-down_read-when-pci_devices-is-empty.patch b/queue-2.6.19/pci-prevent-down_read-when-pci_devices-is-empty.patch
new file mode 100644 (file)
index 0000000..05b0265
--- /dev/null
@@ -0,0 +1,74 @@
+From stable-bounces@linux.kernel.org  Thu Jan 11 07:29:28 2007
+Message-ID: <45A65651.5050202@gentoo.org>
+Date: Thu, 11 Jan 2007 10:22:57 -0500
+From: Daniel Drake <dsd@gentoo.org>
+To: stable@kernel.org
+Cc: ard@telegraafnet.nl
+Subject: PCI: prevent down_read when pci_devices is empty
+
+From: Ard van Breemen <ard@telegraafnet.nl>
+
+The pci_find_subsys gets called very early by obsolete ide setup parameters.
+This is a bogus call since pci is not initialized yet, so the list is empty.
+But in the mean time, interrupts get enabled by down_read.  This can result in
+a kernel panic when the irq controller gets initialized.
+
+This patch checks if the device list is empty before taking the semaphore, and
+hence will not enable irq's.  Furthermore it will inform that it is called
+while pci_devices is empty as a reminder that the ide code needs to be fixed.
+
+The pci_get_subsys can get called in the same manner, and as such is patched
+in the same manner.
+
+[akpm@osdl.org: cleanups]
+Signed-off-by: Ard van Breemen <ard@telegraafnet.nl>
+Cc: Greg KH <greg@kroah.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+This is the other half of the fix for bug #7505
+
+ drivers/pci/search.c |   24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+--- linux-2.6.19.2.orig/drivers/pci/search.c
++++ linux-2.6.19.2/drivers/pci/search.c
+@@ -193,6 +193,18 @@ static struct pci_dev * pci_find_subsys(
+       struct pci_dev *dev;
+       WARN_ON(in_interrupt());
++
++      /*
++       * pci_find_subsys() can be called on the ide_setup() path, super-early
++       * in boot.  But the down_read() will enable local interrupts, which
++       * can cause some machines to crash.  So here we detect and flag that
++       * situation and bail out early.
++       */
++      if (unlikely(list_empty(&pci_devices))) {
++              printk(KERN_INFO "pci_find_subsys() called while pci_devices "
++                              "is still empty\n");
++              return NULL;
++      }
+       down_read(&pci_bus_sem);
+       n = from ? from->global_list.next : pci_devices.next;
+@@ -259,6 +271,18 @@ pci_get_subsys(unsigned int vendor, unsi
+       struct pci_dev *dev;
+       WARN_ON(in_interrupt());
++
++      /*
++       * pci_get_subsys() can potentially be called by drivers super-early
++       * in boot.  But the down_read() will enable local interrupts, which
++       * can cause some machines to crash.  So here we detect and flag that
++       * situation and bail out early.
++       */
++      if (unlikely(list_empty(&pci_devices))) {
++              printk(KERN_NOTICE "pci_get_subsys() called while pci_devices "
++                              "is still empty\n");
++              return NULL;
++      }
+       down_read(&pci_bus_sem);
+       n = from ? from->global_list.next : pci_devices.next;
diff --git a/queue-2.6.19/revert-fix-up-mmap_kmem.patch b/queue-2.6.19/revert-fix-up-mmap_kmem.patch
new file mode 100644 (file)
index 0000000..ab3bf62
--- /dev/null
@@ -0,0 +1,41 @@
+From 6d3154cc1143f62c3b80d9929caeaec6db8cb451 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@woody.linux-foundation.org>
+Date: Mon, 22 Jan 2007 08:53:24 -0800
+Subject: Revert "[PATCH] Fix up mmap_kmem"
+
+This reverts commit 99a10a60ba9bedcf5d70ef81414d3e03816afa3f.
+
+As per Hugh Dickins:
+
+  "Nadia Derbey has reported that mmap of /dev/kmem no longer works with
+   the kernel virtual address as offset, and Franck has confirmed that
+   his patch came from a misunderstanding of what an offset means to
+   /dev/kmem - whereas his patch description seems to say that he was
+   correcting the offset on a few plaforms, there was no such problem to
+   correct, and his patch was in fact changing its API on all platforms."
+
+Suggested-by: Hugh Dickins <hugh@veritas.com>
+Cc: Franck Bui-Huu <fbuihuu@gmail.com>
+Cc: Nadia Derbey <Nadia.Derbey@bull.net>
+Cc: Andi Kleen <ak@suse.de>
+Cc: Arjan van de Ven <arjan@infradead.org>
+Cc: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ drivers/char/mem.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- linux-2.6.19.2.orig/drivers/char/mem.c
++++ linux-2.6.19.2/drivers/char/mem.c
+@@ -293,8 +293,8 @@ static int mmap_kmem(struct file * file,
+ {
+       unsigned long pfn;
+-      /* Turn a pfn offset into an absolute pfn */
+-      pfn = PFN_DOWN(virt_to_phys((void *)PAGE_OFFSET)) + vma->vm_pgoff;
++      /* Turn a kernel-virtual address into a physical page frame */
++      pfn = __pa((u64)vma->vm_pgoff << PAGE_SHIFT) >> PAGE_SHIFT;
+       /*
+        * RED-PEN: on some architectures there is more mapped memory
diff --git a/queue-2.6.19/sched-tasks-cannot-run-on-cpus-onlined-after-boot.patch b/queue-2.6.19/sched-tasks-cannot-run-on-cpus-onlined-after-boot.patch
new file mode 100644 (file)
index 0000000..f7d2ba4
--- /dev/null
@@ -0,0 +1,39 @@
+From e5e5673f828623e58a401862b33173591faaeaff Mon Sep 17 00:00:00 2001
+From: Nathan Lynch <ntl@pobox.com>
+Date: Wed, 10 Jan 2007 23:15:28 -0800
+Subject: sched: tasks cannot run on cpus onlined after boot
+
+Commit 5c1e176781f43bc902a51e5832f789756bff911b ("sched: force /sbin/init
+off isolated cpus") sets init's cpus_allowed to a subset of cpu_online_map
+at boot time, which means that tasks won't be scheduled on cpus that are
+added to the system later.
+
+Make init's cpus_allowed a subset of cpu_possible_map instead.  This should
+still preserve the behavior that Nick's change intended.
+
+Thanks to Giuliano Pochini for reporting this and testing the fix:
+
+http://ozlabs.org/pipermail/linuxppc-dev/2006-December/029397.html
+
+Signed-off-by: Nathan Lynch <ntl@pobox.com>
+Acked-by: Ingo Molnar <mingo@elte.hu>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Cc: <stable@kernel.org>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ kernel/sched.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.19.2.orig/kernel/sched.c
++++ linux-2.6.19.2/kernel/sched.c
+@@ -6765,7 +6765,7 @@ void __init sched_init_smp(void)
+       lock_cpu_hotplug();
+       arch_init_sched_domains(&cpu_online_map);
+-      cpus_andnot(non_isolated_cpus, cpu_online_map, cpu_isolated_map);
++      cpus_andnot(non_isolated_cpus, cpu_possible_map, cpu_isolated_map);
+       if (cpus_empty(non_isolated_cpus))
+               cpu_set(smp_processor_id(), non_isolated_cpus);
+       unlock_cpu_hotplug();
index 48aea6a8c2b20b5b403842e55bd80d6d42a154a6..a86218fb95700e126d9bcc4467b28207062a1c77 100644 (file)
@@ -10,3 +10,22 @@ netfilter-arp_tables-fix-userspace-compilation.patch
 repair-snd-usb-usx2y-over-ohci.patch
 ib-mthca-fix-off-by-one-in-fmr-handling-on-memfree.patch
 fix-reparenting-to-the-same-thread-group.patch
+ieee1394-sbp2-fix-probing-of-some-dvd-rom-rws.patch
+sched-tasks-cannot-run-on-cpus-onlined-after-boot.patch
+fix-up-cifs-for-test_clear_page_dirty-removal.patch
+start_kernel-test-if-irq-s-got-enabled-early-barf-and-disable-them-again.patch
+pci-prevent-down_read-when-pci_devices-is-empty.patch
+ipv6-mcast-fix-joining-all-node-multicast-group-on-device-initialization.patch
+ctnetlink-check-for-status-attribute-existence-on-conntrack-creation.patch
+ctnetlink-fix-leak-in-ctnetlink_create_conntrack-error-path.patch
+ipsec-policy-list-disorder.patch
+alsa-hda-codec-fix-null-dereference-in-generic-hda-code.patch
+netlabel-selinux_mls_fix
+ib-iser-return-error-code-when-pdus-may-not-be-sent.patch
+fix-uml-on-non-standard-vm-split-hosts.patch
+acpi-fix-cpufreq-regression.patch
+x86-work-around-gcc-4.2-over-aggressive-optimizer.patch
+netfilter-fix-iptables-abi-breakage-on-cris.patch
+elevator-move-clearing-of-unplug-flag-earlier.patch
+revert-fix-up-mmap_kmem.patch
+sunrpc-give-cloned-rpc-clients-their-own-rpc_pipefs-directory.patch
diff --git a/queue-2.6.19/start_kernel-test-if-irq-s-got-enabled-early-barf-and-disable-them-again.patch b/queue-2.6.19/start_kernel-test-if-irq-s-got-enabled-early-barf-and-disable-them-again.patch
new file mode 100644 (file)
index 0000000..82bac4b
--- /dev/null
@@ -0,0 +1,43 @@
+From stable-bounces@linux.kernel.org  Thu Jan 11 07:28:24 2007
+Message-ID: <45A65610.601@gentoo.org>
+Date: Thu, 11 Jan 2007 10:21:52 -0500
+From: Daniel Drake <dsd@gentoo.org>
+To: stable@kernel.org
+Cc: ard@telegraafnet.nl
+Subject: start_kernel: test if irq's got enabled early, barf, and disable them again
+
+From: Ard van Breemen <ard@telegraafnet.nl>
+
+The calls made by parse_parms to other initialization code might enable
+interrupts again way too early.
+
+Having interrupts on this early can make systems PANIC when they initialize
+the IRQ controllers (which happens later in the code).  This patch detects
+that irq's are enabled again, barfs about it and disables them again as a
+safety net.
+
+[akpm@osdl.org: cleanups]
+Signed-off-by: Ard van Breemen <ard@telegraafnet.nl>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+This is half of the fix for http://bugzilla.kernel.org/show_bug.cgi?id=7505
+
+ init/main.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- linux-2.6.19.2.orig/init/main.c
++++ linux-2.6.19.2/init/main.c
+@@ -525,6 +525,11 @@ asmlinkage void __init start_kernel(void
+       parse_args("Booting kernel", command_line, __start___param,
+                  __stop___param - __start___param,
+                  &unknown_bootoption);
++      if (!irqs_disabled()) {
++              printk(KERN_WARNING "start_kernel(): bug: interrupts were "
++                              "enabled *very* early, fixing it\n");
++              local_irq_disable();
++      }
+       sort_main_extable();
+       trap_init();
+       rcu_init();
diff --git a/queue-2.6.19/sunrpc-give-cloned-rpc-clients-their-own-rpc_pipefs-directory.patch b/queue-2.6.19/sunrpc-give-cloned-rpc-clients-their-own-rpc_pipefs-directory.patch
new file mode 100644 (file)
index 0000000..dc51971
--- /dev/null
@@ -0,0 +1,111 @@
+From stable-bounces@linux.kernel.org  Wed Jan 24 20:23:29 2007
+From: Trond Myklebust <trond.myklebust@fys.uio.no>
+To: stable@kernel.org
+Date: Wed, 24 Jan 2007 20:13:46 -0800
+Message-Id: <1169698426.8355.22.camel@lade.trondhjem.org>
+Subject: SUNRPC: Give cloned RPC clients their own rpc_pipefs directory
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+This patch fixes a regression in 2.6.19 in which the use of multiple
+krb5 mounts against the same NFS server may result in an Oops on
+unmount. The Oops is due to the fact that multiple NFS krb5 clients may
+end up inadvertently sharing the same rpc_pipefs upcall pipe. The first
+client to 'umount' will unlink that shared pipe, causing an Oops.
+
+The solution is to give each client their own upcall pipe. This fix has
+been in mainline since 2.6.20-rc1.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ include/linux/sunrpc/clnt.h |    1 +
+ net/sunrpc/clnt.c           |   23 +++++++++++++----------
+ 2 files changed, 14 insertions(+), 10 deletions(-)
+
+diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
+index f6d1d64..a1be89d 100644
+--- a/include/linux/sunrpc/clnt.h
++++ b/include/linux/sunrpc/clnt.h
+@@ -53,6 +53,7 @@ struct rpc_clnt {
+       struct dentry *         cl_dentry;      /* inode */
+       struct rpc_clnt *       cl_parent;      /* Points to parent of clones */
+       struct rpc_rtt          cl_rtt_default;
++      struct rpc_program *    cl_program;
+       char                    cl_inline_name[32];
+ };
+diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
+index de8bbfc..8b78177 100644
+--- a/net/sunrpc/clnt.c
++++ b/net/sunrpc/clnt.c
+@@ -144,6 +144,7 @@ static struct rpc_clnt * rpc_new_client(
+       err = -ENOMEM;
+       if (clnt->cl_metrics == NULL)
+               goto out_no_stats;
++      clnt->cl_program  = program;
+       if (!xprt_bound(clnt->cl_xprt))
+               clnt->cl_autobind = 1;
+@@ -257,6 +258,7 @@ struct rpc_clnt *
+ rpc_clone_client(struct rpc_clnt *clnt)
+ {
+       struct rpc_clnt *new;
++      int err = -ENOMEM;
+       new = kmemdup(clnt, sizeof(*new), GFP_KERNEL);
+       if (!new)
+@@ -266,6 +268,9 @@ rpc_clone_client(struct rpc_clnt *clnt)
+       new->cl_metrics = rpc_alloc_iostats(clnt);
+       if (new->cl_metrics == NULL)
+               goto out_no_stats;
++      err = rpc_setup_pipedir(new, clnt->cl_program->pipe_dir_name);
++      if (err != 0)
++              goto out_no_path;
+       new->cl_parent = clnt;
+       atomic_inc(&clnt->cl_count);
+       new->cl_xprt = xprt_get(clnt->cl_xprt);
+@@ -273,17 +278,17 @@ rpc_clone_client(struct rpc_clnt *clnt)
+       new->cl_autobind = 0;
+       new->cl_oneshot = 0;
+       new->cl_dead = 0;
+-      if (!IS_ERR(new->cl_dentry))
+-              dget(new->cl_dentry);
+       rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval);
+       if (new->cl_auth)
+               atomic_inc(&new->cl_auth->au_count);
+       return new;
++out_no_path:
++      rpc_free_iostats(new->cl_metrics);
+ out_no_stats:
+       kfree(new);
+ out_no_clnt:
+-      printk(KERN_INFO "RPC: out of memory in %s\n", __FUNCTION__);
+-      return ERR_PTR(-ENOMEM);
++      dprintk("RPC: %s returned error %d\n", __FUNCTION__, err);
++      return ERR_PTR(err);
+ }
+ /*
+@@ -336,16 +341,14 @@ rpc_destroy_client(struct rpc_clnt *clnt
+               rpcauth_destroy(clnt->cl_auth);
+               clnt->cl_auth = NULL;
+       }
+-      if (clnt->cl_parent != clnt) {
+-              if (!IS_ERR(clnt->cl_dentry))
+-                      dput(clnt->cl_dentry);
+-              rpc_destroy_client(clnt->cl_parent);
+-              goto out_free;
+-      }
+       if (!IS_ERR(clnt->cl_dentry)) {
+               rpc_rmdir(clnt->cl_dentry);
+               rpc_put_mount();
+       }
++      if (clnt->cl_parent != clnt) {
++              rpc_destroy_client(clnt->cl_parent);
++              goto out_free;
++      }
+       if (clnt->cl_server != clnt->cl_inline_name)
+               kfree(clnt->cl_server);
+ out_free:
diff --git a/queue-2.6.19/x86-work-around-gcc-4.2-over-aggressive-optimizer.patch b/queue-2.6.19/x86-work-around-gcc-4.2-over-aggressive-optimizer.patch
new file mode 100644 (file)
index 0000000..8444bb0
--- /dev/null
@@ -0,0 +1,40 @@
+From stable-bounces@linux.kernel.org  Tue Jan 23 09:27:50 2007
+From: Andi Kleen <ak@suse.de>
+To: stable@kernel.org
+Date: Wed, 24 Jan 2007 04:17:09 +1100
+Message-Id: <200701240417.09428.ak@suse.de>
+Subject: x86: Work around gcc 4.2 over aggressive optimizer
+
+The new PDA code uses a dummy _proxy_pda variable to describe
+memory references to the PDA. It is never referenced
+in inline assembly, but exists as input/output arguments.
+gcc 4.2 in some cases can CSE references to this which causes
+unresolved symbols.  Define it to zero to avoid this.
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ arch/i386/kernel/vmlinux.lds.S   |    1 +
+ arch/x86_64/kernel/vmlinux.lds.S |    1 +
+ 2 files changed, 2 insertions(+)
+
+--- linux-2.6.19.2.orig/arch/i386/kernel/vmlinux.lds.S
++++ linux-2.6.19.2/arch/i386/kernel/vmlinux.lds.S
+@@ -13,6 +13,7 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386"
+ OUTPUT_ARCH(i386)
+ ENTRY(phys_startup_32)
+ jiffies = jiffies_64;
++_proxy_pda = 0;
+ PHDRS {
+       text PT_LOAD FLAGS(5);  /* R_E */
+--- linux-2.6.19.2.orig/arch/x86_64/kernel/vmlinux.lds.S
++++ linux-2.6.19.2/arch/x86_64/kernel/vmlinux.lds.S
+@@ -13,6 +13,7 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86
+ OUTPUT_ARCH(i386:x86-64)
+ ENTRY(phys_startup_64)
+ jiffies_64 = jiffies;
++_proxy_pda = 0;
+ PHDRS {
+       text PT_LOAD FLAGS(5);  /* R_E */
+       data PT_LOAD FLAGS(7);  /* RWE */