--- /dev/null
+From a39a2d7c72b358c6253a2ec28e17b023b7f6f41c Mon Sep 17 00:00:00 2001
+From: Arjan van de Ven <arjan@linux.intel.com>
+Date: Mon, 19 May 2008 15:55:15 -0700
+Subject: [PATCH] ACPI: Reject below-freezing temperatures as invalid critical temperatures
+
+From: Arjan van de Ven <arjan@linux.intel.com>
+
+commit a39a2d7c72b358c6253a2ec28e17b023b7f6f41c upstream
+
+My laptop thinks that it's a good idea to give -73C as the critical
+CPU temperature.... which isn't the best thing since it causes a shutdown
+right at bootup.
+
+Temperatures below freezing are clearly invalid critical thresholds
+so just reject these as such.
+
+Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
+Acked-by: Zhang Rui <rui.zhang@intel.com>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/thermal.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/acpi/thermal.c
++++ b/drivers/acpi/thermal.c
+@@ -359,10 +359,17 @@ static int acpi_thermal_trips_update(str
+ if (flag & ACPI_TRIPS_CRITICAL) {
+ status = acpi_evaluate_integer(tz->device->handle,
+ "_CRT", NULL, &tz->trips.critical.temperature);
+- if (ACPI_FAILURE(status)) {
++ /*
++ * Treat freezing temperatures as invalid as well; some
++ * BIOSes return really low values and cause reboots at startup.
++ * Below zero (Celcius) values clearly aren't right for sure..
++ * ... so lets discard those as invalid.
++ */
++ if (ACPI_FAILURE(status) ||
++ tz->trips.critical.temperature <= 2732) {
+ tz->trips.critical.flags.valid = 0;
+ ACPI_EXCEPTION((AE_INFO, status,
+- "No critical threshold"));
++ "No or invalid critical threshold"));
+ return -ENODEV;
+ } else {
+ tz->trips.critical.flags.valid = 1;
--- /dev/null
+From e4cc58944c1e2ce41e3079d4eb60c95e7ce04b2b Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@suse.de>
+Date: Sun, 20 Apr 2008 02:25:13 +1000
+Subject: [PATCH] [POWERPC] Add compat handler for PTRACE_GETSIGINFO
+
+From: Andreas Schwab <schwab@suse.de>
+
+commit e4cc58944c1e2ce41e3079d4eb60c95e7ce04b2b upstream
+
+Current versions of gdb require a working implementation of
+PTRACE_GETSIGINFO for proper watchpoint support. Since struct siginfo
+contains pointers it must be converted when passed to a 32-bit debugger.
+
+Signed-off-by: Andreas Schwab <schwab@suse.de>
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/kernel/ppc32.h | 2 ++
+ arch/powerpc/kernel/ptrace32.c | 27 +++++++++++++++++++++++++++
+ 2 files changed, 29 insertions(+)
+
+--- a/arch/powerpc/kernel/ppc32.h
++++ b/arch/powerpc/kernel/ppc32.h
+@@ -135,4 +135,6 @@ struct ucontext32 {
+ struct mcontext32 uc_mcontext;
+ };
+
++extern int copy_siginfo_to_user32(struct compat_siginfo __user *d, siginfo_t *s);
++
+ #endif /* _PPC64_PPC32_H */
+--- a/arch/powerpc/kernel/ptrace32.c
++++ b/arch/powerpc/kernel/ptrace32.c
+@@ -29,12 +29,15 @@
+ #include <linux/security.h>
+ #include <linux/signal.h>
+ #include <linux/compat.h>
++#include <linux/elf.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/page.h>
+ #include <asm/pgtable.h>
+ #include <asm/system.h>
+
++#include "ppc32.h"
++
+ /*
+ * does not yet catch signals sent when the child dies.
+ * in exit.c or in signal.c.
+@@ -64,6 +67,27 @@ static long compat_ptrace_old(struct tas
+ return -EPERM;
+ }
+
++static int compat_ptrace_getsiginfo(struct task_struct *child, compat_siginfo_t __user *data)
++{
++ siginfo_t lastinfo;
++ int error = -ESRCH;
++
++ read_lock(&tasklist_lock);
++ if (likely(child->sighand != NULL)) {
++ error = -EINVAL;
++ spin_lock_irq(&child->sighand->siglock);
++ if (likely(child->last_siginfo != NULL)) {
++ lastinfo = *child->last_siginfo;
++ error = 0;
++ }
++ spin_unlock_irq(&child->sighand->siglock);
++ }
++ read_unlock(&tasklist_lock);
++ if (!error)
++ return copy_siginfo_to_user32(data, &lastinfo);
++ return error;
++}
++
+ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+ {
+@@ -282,6 +306,9 @@ long compat_arch_ptrace(struct task_stru
+ 0, PT_REGS_COUNT * sizeof(compat_long_t),
+ compat_ptr(data));
+
++ case PTRACE_GETSIGINFO:
++ return compat_ptrace_getsiginfo(child, compat_ptr(data));
++
+ case PTRACE_GETFPREGS:
+ case PTRACE_SETFPREGS:
+ case PTRACE_GETVRREGS:
--- /dev/null
+From 6844e63a9458d15b4437aa467c99128d994b0f6c Mon Sep 17 00:00:00 2001
+From: Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+Date: Sun, 3 Feb 2008 21:53:20 -0500
+Subject: ath5k: Use software encryption for now
+
+From: Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+
+Commit 6844e63a9458d15b4437aa467c99128d994b0f6c
+
+Hardware encryption doesn't work yet so lets use software
+encryption for now.
+
+Changes-licensed-under: 3-Clause-BSD
+
+Signed-off-by: Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Cc: Jiri Benc <jbenc@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath5k/base.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/ath5k/base.c
++++ b/drivers/net/wireless/ath5k/base.c
+@@ -2864,7 +2864,9 @@ ath5k_set_key(struct ieee80211_hw *hw, e
+
+ switch(key->alg) {
+ case ALG_WEP:
+- break;
++ /* XXX: fix hardware encryption, its not working. For now
++ * allow software encryption */
++ /* break; */
+ case ALG_TKIP:
+ case ALG_CCMP:
+ return -EOPNOTSUPP;
--- /dev/null
+From 7efd52a407bed6a2b02015b8ebbff7beba155392 Mon Sep 17 00:00:00 2001
+From: Holger Macht <hmacht@suse.de>
+Date: Mon, 9 Jun 2008 16:22:24 -0700
+Subject: bay: exit if notify handler cannot be installed
+
+From: Holger Macht <hmacht@suse.de>
+
+commit 7efd52a407bed6a2b02015b8ebbff7beba155392 upstream
+
+If acpi_install_notify_handler() for a bay device fails, the bay driver is
+superfluous. Most likely, another driver (like libata) is already caring
+about this device anyway. Furthermore,
+register_hotplug_dock_device(acpi_handle) from the dock driver must not be
+called twice with the same handler. This would result in an endless loop
+consuming 100% of CPU. So clean up and exit.
+
+Signed-off-by: Holger Macht <hmacht@suse.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Len Brown <len.brown@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/bay.c | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+--- a/drivers/acpi/bay.c
++++ b/drivers/acpi/bay.c
+@@ -299,16 +299,20 @@ static int bay_add(acpi_handle handle, i
+ */
+ pdev->dev.uevent_suppress = 0;
+
+- if (acpi_bay_add_fs(new_bay)) {
+- platform_device_unregister(new_bay->pdev);
+- goto bay_add_err;
+- }
+-
+ /* register for events on this device */
+ status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
+ bay_notify, new_bay);
+ if (ACPI_FAILURE(status)) {
+- printk(KERN_ERR PREFIX "Error installing bay notify handler\n");
++ printk(KERN_INFO PREFIX "Error installing bay notify handler\n");
++ platform_device_unregister(new_bay->pdev);
++ goto bay_add_err;
++ }
++
++ if (acpi_bay_add_fs(new_bay)) {
++ acpi_remove_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
++ bay_notify);
++ platform_device_unregister(new_bay->pdev);
++ goto bay_add_err;
+ }
+
+ /* if we are on a dock station, we should register for dock
--- /dev/null
+From ec8dab36e0738d3059980d144e34f16a26bbda7d Mon Sep 17 00:00:00 2001
+From: Marcel Holtmann <marcel@holtmann.org>
+Date: Mon, 14 Jul 2008 20:13:53 +0200
+Subject: Bluetooth: Signal user-space for HIDP and BNEP socket errors
+
+From: Marcel Holtmann <marcel@holtmann.org>
+
+commit ec8dab36e0738d3059980d144e34f16a26bbda7d upstream
+
+When using the HIDP or BNEP kernel support, the user-space needs to
+know if the connection has been terminated for some reasons. Wake up
+the application if that happens. Otherwise kernel and user-space are
+no longer on the same page and weird behaviors can happen.
+
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/bluetooth/bnep/core.c | 5 +++++
+ net/bluetooth/hidp/core.c | 10 ++++++++++
+ 2 files changed, 15 insertions(+)
+
+--- a/net/bluetooth/bnep/core.c
++++ b/net/bluetooth/bnep/core.c
+@@ -507,6 +507,11 @@ static int bnep_session(void *arg)
+ /* Delete network device */
+ unregister_netdev(dev);
+
++ /* Wakeup user-space polling for socket errors */
++ s->sock->sk->sk_err = EUNATCH;
++
++ wake_up_interruptible(s->sock->sk->sk_sleep);
++
+ /* Release the socket */
+ fput(s->sock->file);
+
+--- a/net/bluetooth/hidp/core.c
++++ b/net/bluetooth/hidp/core.c
+@@ -581,6 +581,12 @@ static int hidp_session(void *arg)
+ hid_free_device(session->hid);
+ }
+
++ /* Wakeup user-space polling for socket errors */
++ session->intr_sock->sk->sk_err = EUNATCH;
++ session->ctrl_sock->sk->sk_err = EUNATCH;
++
++ hidp_schedule(session);
++
+ fput(session->intr_sock->file);
+
+ wait_event_timeout(*(ctrl_sk->sk_sleep),
+@@ -879,6 +885,10 @@ int hidp_del_connection(struct hidp_conn
+ skb_queue_purge(&session->ctrl_transmit);
+ skb_queue_purge(&session->intr_transmit);
+
++ /* Wakeup user-space polling for socket errors */
++ session->intr_sock->sk->sk_err = EUNATCH;
++ session->ctrl_sock->sk->sk_err = EUNATCH;
++
+ /* Kill session thread */
+ atomic_inc(&session->terminate);
+ hidp_schedule(session);
--- /dev/null
+From 0607fd02587a6b4b086dc746d63123c1f284db68 Mon Sep 17 00:00:00 2001
+From: Frank Seidel <fseidel@suse.de>
+Date: Mon, 28 Apr 2008 02:16:31 -0700
+Subject: fat: detect media without partition table correctly
+
+From: Frank Seidel <fseidel@suse.de>
+
+commit 0607fd02587a6b4b086dc746d63123c1f284db68 upstream
+
+I received a complaint that some FAT formated medias (e.g. sd memory cards)
+trigger a "unknown partition table" message even though there is no partition
+table and they work correctly, while in general (when e.g. formated with
+mkdosfs or even Windows Vista) this message is not shown.
+
+Currently this seems only to happen when the medias get formatted with Windows
+XP (and possibly Win 2000). Then the boot indicator byte contains garbage
+(part of text message) and so do the other parts checked by msdos_paritition
+which then later triggers this message.
+
+References: novell bug #364365
+
+Most fat formatted media without partition table contains zeros in the boot
+indication and the other tested bytes and so falls through the checks in
+msdos_partition, leading it to return with 1 (all is fine).
+
+But some (e.g. WinXP formatted) fat fomated medias don't use boot_ind and so
+the check fails and causes a "unkown partition table" warning eventhough there
+is none and everything would be fine.
+
+This additional check directly verifies if there is a fat formatted medium
+without a partition table.
+
+Signed-off-by: Frank Seidel <fseidel@suse.de>
+Cc: Andreas Dilger <adilger@sun.com>
+Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/partitions/msdos.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+--- a/fs/partitions/msdos.c
++++ b/fs/partitions/msdos.c
+@@ -18,7 +18,7 @@
+ *
+ * Re-organised Feb 1998 Russell King
+ */
+-
++#include <linux/msdos_fs.h>
+
+ #include "check.h"
+ #include "msdos.h"
+@@ -419,6 +419,7 @@ int msdos_partition(struct parsed_partit
+ Sector sect;
+ unsigned char *data;
+ struct partition *p;
++ struct fat_boot_sector *fb;
+ int slot;
+
+ data = read_dev_sector(bdev, 0, §);
+@@ -444,8 +445,21 @@ int msdos_partition(struct parsed_partit
+ p = (struct partition *) (data + 0x1be);
+ for (slot = 1; slot <= 4; slot++, p++) {
+ if (p->boot_ind != 0 && p->boot_ind != 0x80) {
+- put_dev_sector(sect);
+- return 0;
++ /*
++ * Even without a valid boot inidicator value
++ * its still possible this is valid FAT filesystem
++ * without a partition table.
++ */
++ fb = (struct fat_boot_sector *) data;
++ if (slot == 1 && fb->reserved && fb->fats
++ && fat_valid_media(fb->media)) {
++ printk("\n");
++ put_dev_sector(sect);
++ return 1;
++ } else {
++ put_dev_sector(sect);
++ return 0;
++ }
+ }
+ }
+
--- /dev/null
+From 73f20e58b1d586e9f6d3ddc3aad872829aca7743 Mon Sep 17 00:00:00 2001
+From: Andrew Morton <akpm@linux-foundation.org>
+Date: Mon, 28 Apr 2008 02:16:30 -0700
+Subject: FAT_VALID_MEDIA(): remove pointless test
+
+From: Andrew Morton <akpm@linux-foundation.org>
+
+commit 73f20e58b1d586e9f6d3ddc3aad872829aca7743 upstream
+
+The on-disk media specification field in FAT is only 8-bits, so testing for
+<=0xff is pointless, and can generate a "comparison is always true due to
+limited range of data type" warning.
+
+While we're there, convert FAT_VALID_MEDIA() into a C function - the present
+implementation is buggy: it generates either one or two references to its
+argument.
+
+Cc: Frank Seidel <fseidel@suse.de>
+Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/fat/inode.c | 2 +-
+ include/linux/msdos_fs.h | 6 +++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+--- a/fs/fat/inode.c
++++ b/fs/fat/inode.c
+@@ -1208,7 +1208,7 @@ int fat_fill_super(struct super_block *s
+ */
+
+ media = b->media;
+- if (!FAT_VALID_MEDIA(media)) {
++ if (!fat_valid_media(media)) {
+ if (!silent)
+ printk(KERN_ERR "FAT: invalid media value (0x%02x)\n",
+ media);
+--- a/include/linux/msdos_fs.h
++++ b/include/linux/msdos_fs.h
+@@ -58,7 +58,11 @@
+ #define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */
+
+ /* media of boot sector */
+-#define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0)
++static inline int fat_valid_media(u8 media)
++{
++ return 0xf8 <= media || media == 0xf0;
++}
++
+ #define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \
+ MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x))
+
--- /dev/null
+From 0376bce7b0659fe1e80d045860087072583ab93f Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Thu, 3 Jul 2008 10:45:38 -0400
+Subject: Input: i8042 - add Acer Aspire 1360 to nomux blacklist
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 0376bce7b0659fe1e80d045860087072583ab93f upstream.
+
+Acer Aspire 1360 needs to be added to nomux blacklist, otherwise its
+touchpad misbehaves.
+
+Reported-by: Clark Tompsett <clarkt@cnsp.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -298,6 +298,13 @@ static struct dmi_system_id __initdata i
+ DMI_MATCH(DMI_PRODUCT_VERSION, "3000 N100"),
+ },
+ },
++ {
++ .ident = "Acer Aspire 1360",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
++ },
++ },
+ { }
+ };
+
--- /dev/null
+From 3f79b1e94002791a42837a46b5817e87a0ac0873 Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Wed, 30 Jan 2008 16:34:52 -0500
+Subject: Input: i8042 - add Fujitsu-Siemens Amilo Pro 2010 to nomux list
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 3f79b1e94002791a42837a46b5817e87a0ac0873 upstream
+
+Reported-by: Hans Aschauer <Hans.Aschauer@web.de>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -200,6 +200,13 @@ static struct dmi_system_id __initdata i
+ },
+ },
+ {
++ .ident = "Fujitsu-Siemens Amilo Pro 2010",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
++ },
++ },
++ {
+ /*
+ * No data is coming from the touchscreen unless KBC
+ * is in legacy mode.
--- /dev/null
+From efd5184646d5d400fc538d093e9a0bec22a75551 Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Fri, 6 Jun 2008 00:56:43 -0400
+Subject: Input: i8042 - add Fujitsu-Siemens Amilo Pro V2030 to nomux table
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+Commit efd5184646d5d400fc538d093e9a0bec22a75551 upstream
+
+Fujitsu Siemens Amilo Pro V2030 needs nomux table entry, in addition to
+already existing entry for V2010 model (note that Fujitsu-Siemens changed
+the capitalization in the DMI data for product).
+
+Tested-by: Jiri Mleziva <jmleziva@tiscali.cz>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -193,6 +193,13 @@ static struct dmi_system_id __initdata i
+ },
+ },
+ {
++ .ident = "Fujitsu-Siemens Amilo Pro 2030",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
++ },
++ },
++ {
+ /*
+ * No data is coming from the touchscreen unless KBC
+ * is in legacy mode.
--- /dev/null
+From 5b5b43d0b32ea586036638288c31179f00de5443 Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Thu, 3 Jul 2008 11:00:28 -0400
+Subject: Input: i8042 - add Gericom Bellagio to nomux blacklist
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 5b5b43d0b32ea586036638288c31179f00de5443 upstream
+
+Gericom Bellagio needs to be added to nomux blacklist, otherwise its
+touchpad misbehaves.
+
+Reported-by: Roland Kletzing <roland.kletzing@materna.de>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -296,6 +296,13 @@ static struct dmi_system_id __initdata i
+ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
+ },
+ },
++ {
++ .ident = "Gericom Bellagio",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
++ DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
++ },
++ },
+ { }
+ };
+ #endif
--- /dev/null
+From c3a34f4390396a4bede3f8b7bcc5153f50b974bb Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Wed, 28 May 2008 01:10:52 -0400
+Subject: Input: i8042 - add Intel D845PESV to nopnp list
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit c3a34f4390396a4bede3f8b7bcc5153f50b974bb upstream
+
+This patch introduces i8042_dmi_nopnp_table to make it possible to perform
+DMI matches for systems that need 'i8042.nopnp' to work correctly, and
+introduces such an entry for Intel D845PESV -- this system doesn't
+detect PS2 mouse reliably without this option, as reported by Robert
+Lewis.
+
+[dtor@mail.ru - make it compile if CONFIG_PNP is off - reported
+ by Randy Dunlap]
+
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h | 29 ++++++++++++++++++-----------
+ 1 file changed, 18 insertions(+), 11 deletions(-)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -63,7 +63,7 @@ static inline void i8042_write_command(i
+ outb(val, I8042_COMMAND_REG);
+ }
+
+-#if defined(__i386__) || defined(__x86_64__)
++#ifdef CONFIG_X86
+
+ #include <linux/dmi.h>
+
+@@ -287,14 +287,19 @@ static struct dmi_system_id __initdata i
+ { }
+ };
+
+-
+-
++#ifdef CONFIG_PNP
++static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = {
++ {
++ .ident = "Intel MBO Desktop D845PESV",
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "D845PESV"),
++ DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
++ },
++ },
++ { }
++};
+ #endif
+
+-#ifdef CONFIG_X86
+-
+-#include <linux/dmi.h>
+-
+ /*
+ * Some Wistron based laptops need us to explicitly enable the 'Dritek
+ * keyboard extension' to make their extra keys start generating scancodes.
+@@ -342,7 +347,6 @@ static struct dmi_system_id __initdata i
+
+ #endif /* CONFIG_X86 */
+
+-
+ #ifdef CONFIG_PNP
+ #include <linux/pnp.h>
+
+@@ -452,6 +456,11 @@ static int __init i8042_pnp_init(void)
+ int pnp_data_busted = 0;
+ int err;
+
++#ifdef CONFIG_X86
++ if (dmi_check_system(i8042_dmi_nopnp_table))
++ i8042_nopnp = 1;
++#endif
++
+ if (i8042_nopnp) {
+ printk(KERN_INFO "i8042: PNP detection disabled\n");
+ return 0;
+@@ -577,15 +586,13 @@ static int __init i8042_platform_init(vo
+ i8042_reset = 1;
+ #endif
+
+-#if defined(__i386__) || defined(__x86_64__)
++#ifdef CONFIG_X86
+ if (dmi_check_system(i8042_dmi_noloop_table))
+ i8042_noloop = 1;
+
+ if (dmi_check_system(i8042_dmi_nomux_table))
+ i8042_nomux = 1;
+-#endif
+
+-#ifdef CONFIG_X86
+ if (dmi_check_system(i8042_dmi_dritek_table))
+ i8042_dritek = 1;
+ #endif /* CONFIG_X86 */
--- /dev/null
+From 2f6a77d56523c14651236bc401a99b0e2aca2fdd Mon Sep 17 00:00:00 2001
+From: Jiri Kosina <jkosina@suse.cz>
+Date: Tue, 17 Jun 2008 11:47:27 -0400
+Subject: [PATCH] Input: i8042 - retry failed CTR writes when resuming
+
+From: Jiri Kosina <jkosina@suse.cz>
+
+commit 2f6a77d56523c14651236bc401a99b0e2aca2fdd upstream
+
+There are systems that fail in i8042_resume() with
+
+ i8042: Can't write CTR to resume
+
+as i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR) fails even though the
+controller claimed itself to be ready before.
+
+One retry after failing write fixes the problems on the failing systems.
+
+Reported-by: Helmut Schaa <hschaa@novell.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/input/serio/i8042.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/input/serio/i8042.c
++++ b/drivers/input/serio/i8042.c
+@@ -938,8 +938,12 @@ static int i8042_resume(struct platform_
+ i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS;
+ i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT);
+ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
+- printk(KERN_ERR "i8042: Can't write CTR to resume\n");
+- return -EIO;
++ printk(KERN_WARNING "i8042: Can't write CTR to resume, retrying...\n");
++ msleep(50);
++ if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
++ printk(KERN_ERR "i8042: CTR write retry failed\n");
++ return -EIO;
++ }
+ }
+
+ if (i8042_mux_present) {
--- /dev/null
+From 5b9a499d77e9dd39c9e6611ea10c56a31604f274 Mon Sep 17 00:00:00 2001
+From: Josef Bacik <jbacik@redhat.com>
+Date: Mon, 28 Apr 2008 02:16:12 -0700
+Subject: jbd: fix possible journal overflow issues
+
+From: Josef Bacik <jbacik@redhat.com>
+
+commit 5b9a499d77e9dd39c9e6611ea10c56a31604f274 upstream
+
+There are several cases where the running transaction can get buffers added to
+its BJ_Metadata list which it never dirtied, which makes its t_nr_buffers
+counter end up larger than its t_outstanding_credits counter.
+
+This will cause issues when starting new transactions as while we are logging
+buffers we decrement t_outstanding_buffers, so when t_outstanding_buffers goes
+negative, we will report that we need less space in the journal than we
+actually need, so transactions will be started even though there may not be
+enough room for them. In the worst case scenario (which admittedly is almost
+impossible to reproduce) this will result in the journal running out of space.
+
+The fix is to only
+refile buffers from the committing transaction to the running transactions
+BJ_Modified list when b_modified is set on that journal, which is the only way
+to be sure if the running transaction has modified that buffer.
+
+This patch also fixes an accounting error in journal_forget, it is possible
+that we can call journal_forget on a buffer without having modified it, only
+gotten write access to it, so instead of freeing a credit, we only do so if
+the buffer was modified. The assert will help catch if this problem occurs.
+Without these two patches I could hit this assert within minutes of running
+postmark, with them this issue no longer arises. Thank you,
+
+Signed-off-by: Josef Bacik <jbacik@redhat.com>
+Cc: <linux-ext4@vger.kernel.org>
+Acked-by: Jan Kara <jack@ucw.cz>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jbd/commit.c | 3 +++
+ fs/jbd/transaction.c | 21 ++++++++++++++++++---
+ 2 files changed, 21 insertions(+), 3 deletions(-)
+
+--- a/fs/jbd/commit.c
++++ b/fs/jbd/commit.c
+@@ -472,6 +472,9 @@ void journal_commit_transaction(journal_
+ */
+ commit_transaction->t_state = T_COMMIT;
+
++ J_ASSERT(commit_transaction->t_nr_buffers <=
++ commit_transaction->t_outstanding_credits);
++
+ descriptor = NULL;
+ bufs = 0;
+ while (commit_transaction->t_buffers) {
+--- a/fs/jbd/transaction.c
++++ b/fs/jbd/transaction.c
+@@ -1235,6 +1235,7 @@ int journal_forget (handle_t *handle, st
+ struct journal_head *jh;
+ int drop_reserve = 0;
+ int err = 0;
++ int was_modified = 0;
+
+ BUFFER_TRACE(bh, "entry");
+
+@@ -1253,6 +1254,9 @@ int journal_forget (handle_t *handle, st
+ goto not_jbd;
+ }
+
++ /* keep track of wether or not this transaction modified us */
++ was_modified = jh->b_modified;
++
+ /*
+ * The buffer's going from the transaction, we must drop
+ * all references -bzzz
+@@ -1270,7 +1274,12 @@ int journal_forget (handle_t *handle, st
+
+ JBUFFER_TRACE(jh, "belongs to current transaction: unfile");
+
+- drop_reserve = 1;
++ /*
++ * we only want to drop a reference if this transaction
++ * modified the buffer
++ */
++ if (was_modified)
++ drop_reserve = 1;
+
+ /*
+ * We are no longer going to journal this buffer.
+@@ -1310,7 +1319,13 @@ int journal_forget (handle_t *handle, st
+ if (jh->b_next_transaction) {
+ J_ASSERT(jh->b_next_transaction == transaction);
+ jh->b_next_transaction = NULL;
+- drop_reserve = 1;
++
++ /*
++ * only drop a reference if this transaction modified
++ * the buffer
++ */
++ if (was_modified)
++ drop_reserve = 1;
+ }
+ }
+
+@@ -2135,7 +2150,7 @@ void __journal_refile_buffer(struct jour
+ jh->b_transaction = jh->b_next_transaction;
+ jh->b_next_transaction = NULL;
+ __journal_file_buffer(jh, jh->b_transaction,
+- was_dirty ? BJ_Metadata : BJ_Reserved);
++ jh->b_modified ? BJ_Metadata : BJ_Reserved);
+ J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING);
+
+ if (was_dirty)
--- /dev/null
+From 3f31fddfa26b7594b44ff2b34f9a04ba409e0f91 Mon Sep 17 00:00:00 2001
+From: Mingming Cao <cmm@us.ibm.com>
+Date: Fri, 25 Jul 2008 01:46:22 -0700
+Subject: jbd: fix race between free buffer and commit transaction
+
+From: Mingming Cao <cmm@us.ibm.com>
+
+commit 3f31fddfa26b7594b44ff2b34f9a04ba409e0f91 upstream
+
+journal_try_to_free_buffers() could race with jbd commit transaction when
+the later is holding the buffer reference while waiting for the data
+buffer to flush to disk. If the caller of journal_try_to_free_buffers()
+request tries hard to release the buffers, it will treat the failure as
+error and return back to the caller. We have seen the directo IO failed
+due to this race. Some of the caller of releasepage() also expecting the
+buffer to be dropped when passed with GFP_KERNEL mask to the
+releasepage()->journal_try_to_free_buffers().
+
+With this patch, if the caller is passing the __GFP_WAIT and __GFP_FS to
+indicating this call could wait, in case of try_to_free_buffers() failed,
+let's waiting for journal_commit_transaction() to finish commit the
+current committing transaction, then try to free those buffers again.
+
+[akpm@linux-foundation.org: coding-style fixes]
+Signed-off-by: Mingming Cao <cmm@us.ibm.com>
+Reviewed-by: Badari Pulavarty <pbadari@us.ibm.com>
+Acked-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jbd/transaction.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ mm/filemap.c | 3 --
+ 2 files changed, 56 insertions(+), 4 deletions(-)
+
+--- a/fs/jbd/transaction.c
++++ b/fs/jbd/transaction.c
+@@ -1633,12 +1633,42 @@ out:
+ return;
+ }
+
++/*
++ * journal_try_to_free_buffers() could race with journal_commit_transaction()
++ * The latter might still hold the a count on buffers when inspecting
++ * them on t_syncdata_list or t_locked_list.
++ *
++ * journal_try_to_free_buffers() will call this function to
++ * wait for the current transaction to finish syncing data buffers, before
++ * tryinf to free that buffer.
++ *
++ * Called with journal->j_state_lock held.
++ */
++static void journal_wait_for_transaction_sync_data(journal_t *journal)
++{
++ transaction_t *transaction = NULL;
++ tid_t tid;
++
++ spin_lock(&journal->j_state_lock);
++ transaction = journal->j_committing_transaction;
++
++ if (!transaction) {
++ spin_unlock(&journal->j_state_lock);
++ return;
++ }
++
++ tid = transaction->t_tid;
++ spin_unlock(&journal->j_state_lock);
++ log_wait_commit(journal, tid);
++}
+
+ /**
+ * int journal_try_to_free_buffers() - try to free page buffers.
+ * @journal: journal for operation
+ * @page: to try and free
+- * @unused_gfp_mask: unused
++ * @gfp_mask: we use the mask to detect how hard should we try to release
++ * buffers. If __GFP_WAIT and __GFP_FS is set, we wait for commit code to
++ * release the buffers.
+ *
+ *
+ * For all the buffers on this page,
+@@ -1667,9 +1697,11 @@ out:
+ * journal_try_to_free_buffer() is changing its state. But that
+ * cannot happen because we never reallocate freed data as metadata
+ * while the data is part of a transaction. Yes?
++ *
++ * Return 0 on failure, 1 on success
+ */
+ int journal_try_to_free_buffers(journal_t *journal,
+- struct page *page, gfp_t unused_gfp_mask)
++ struct page *page, gfp_t gfp_mask)
+ {
+ struct buffer_head *head;
+ struct buffer_head *bh;
+@@ -1698,7 +1730,28 @@ int journal_try_to_free_buffers(journal_
+ if (buffer_jbd(bh))
+ goto busy;
+ } while ((bh = bh->b_this_page) != head);
++
+ ret = try_to_free_buffers(page);
++
++ /*
++ * There are a number of places where journal_try_to_free_buffers()
++ * could race with journal_commit_transaction(), the later still
++ * holds the reference to the buffers to free while processing them.
++ * try_to_free_buffers() failed to free those buffers. Some of the
++ * caller of releasepage() request page buffers to be dropped, otherwise
++ * treat the fail-to-free as errors (such as generic_file_direct_IO())
++ *
++ * So, if the caller of try_to_release_page() wants the synchronous
++ * behaviour(i.e make sure buffers are dropped upon return),
++ * let's wait for the current transaction to finish flush of
++ * dirty data buffers, then try to free those buffers again,
++ * with the journal locked.
++ */
++ if (ret == 0 && (gfp_mask & __GFP_WAIT) && (gfp_mask & __GFP_FS)) {
++ journal_wait_for_transaction_sync_data(journal);
++ ret = try_to_free_buffers(page);
++ }
++
+ busy:
+ return ret;
+ }
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -2574,9 +2574,8 @@ out:
+ * Otherwise return zero.
+ *
+ * The @gfp_mask argument specifies whether I/O may be performed to release
+- * this page (__GFP_IO), and whether the call may block (__GFP_WAIT).
++ * this page (__GFP_IO), and whether the call may block (__GFP_WAIT & __GFP_FS).
+ *
+- * NOTE: @gfp_mask may go away, and this function may become non-blocking.
+ */
+ int try_to_release_page(struct page *page, gfp_t gfp_mask)
+ {
--- /dev/null
+From 5bc833feaa8b2236265764e7e81f44937be46eda Mon Sep 17 00:00:00 2001
+From: Josef Bacik <jbacik@redhat.com>
+Date: Mon, 28 Apr 2008 02:16:10 -0700
+Subject: jbd: fix the way the b_modified flag is cleared
+
+From: Josef Bacik <jbacik@redhat.com>
+
+commit 5bc833feaa8b2236265764e7e81f44937be46eda upstream
+
+Currently at the start of a journal commit we loop through all of the buffers
+on the committing transaction and clear the b_modified flag (the flag that is
+set when a transaction modifies the buffer) under the j_list_lock.
+
+The problem is that everywhere else this flag is modified only under the jbd
+lock buffer flag, so it will race with a running transaction who could
+potentially set it, and have it unset by the committing transaction.
+
+This is also a big waste, you can have several thousands of buffers that you
+are clearing the modified flag on when you may not need to. This patch
+removes this code and instead clears the b_modified flag upon entering
+do_get_write_access/journal_get_create_access, so if that transaction does
+indeed use the buffer then it will be accounted for properly, and if it does
+not then we know we didn't use it.
+
+That will be important for the next patch in this series. Tested thoroughly
+by myself using postmark/iozone/bonnie++.
+
+Signed-off-by: Josef Bacik <jbacik@redhat.com>
+Cc: <linux-ext4@vger.kernel.org>
+Acked-by: Jan Kara <jack@ucw.cz>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jbd/commit.c | 16 ----------------
+ fs/jbd/transaction.c | 13 +++++++++++++
+ 2 files changed, 13 insertions(+), 16 deletions(-)
+
+--- a/fs/jbd/commit.c
++++ b/fs/jbd/commit.c
+@@ -407,22 +407,6 @@ void journal_commit_transaction(journal_
+ jbd_debug (3, "JBD: commit phase 2\n");
+
+ /*
+- * First, drop modified flag: all accesses to the buffers
+- * will be tracked for a new trasaction only -bzzz
+- */
+- spin_lock(&journal->j_list_lock);
+- if (commit_transaction->t_buffers) {
+- new_jh = jh = commit_transaction->t_buffers->b_tnext;
+- do {
+- J_ASSERT_JH(new_jh, new_jh->b_modified == 1 ||
+- new_jh->b_modified == 0);
+- new_jh->b_modified = 0;
+- new_jh = new_jh->b_tnext;
+- } while (new_jh != jh);
+- }
+- spin_unlock(&journal->j_list_lock);
+-
+- /*
+ * Now start flushing things to disk, in the order they appear
+ * on the transaction lists. Data blocks go first.
+ */
+--- a/fs/jbd/transaction.c
++++ b/fs/jbd/transaction.c
+@@ -609,6 +609,12 @@ repeat:
+ goto done;
+
+ /*
++ * this is the first time this transaction is touching this buffer,
++ * reset the modified flag
++ */
++ jh->b_modified = 0;
++
++ /*
+ * If there is already a copy-out version of this buffer, then we don't
+ * need to make another one
+ */
+@@ -820,9 +826,16 @@ int journal_get_create_access(handle_t *
+
+ if (jh->b_transaction == NULL) {
+ jh->b_transaction = transaction;
++
++ /* first access by this transaction */
++ jh->b_modified = 0;
++
+ JBUFFER_TRACE(jh, "file as BJ_Reserved");
+ __journal_file_buffer(jh, transaction, BJ_Reserved);
+ } else if (jh->b_transaction == journal->j_committing_transaction) {
++ /* first access by this transaction */
++ jh->b_modified = 0;
++
+ JBUFFER_TRACE(jh, "set next transaction");
+ jh->b_next_transaction = transaction;
+ }
--- /dev/null
+From f41f741838480aeaa3a189cff6e210503cf9c42d Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Date: Wed, 11 Jun 2008 17:39:04 -0400
+Subject: [PATCH] NFS: Ensure we zap only the access and acl caches when setting new acls
+
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+
+commit f41f741838480aeaa3a189cff6e210503cf9c42d upstream
+
+...and ensure that we obey the NFS_INO_INVALID_ACL flag when retrieving the
+acls.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfs/inode.c | 4 +---
+ fs/nfs/internal.h | 1 +
+ fs/nfs/nfs3acl.c | 9 ++++++---
+ fs/nfs/nfs4proc.c | 5 ++++-
+ 4 files changed, 12 insertions(+), 7 deletions(-)
+
+--- a/fs/nfs/inode.c
++++ b/fs/nfs/inode.c
+@@ -57,8 +57,6 @@ static int enable_ino64 = NFS_64_BIT_INO
+ static void nfs_invalidate_inode(struct inode *);
+ static int nfs_update_inode(struct inode *, struct nfs_fattr *);
+
+-static void nfs_zap_acl_cache(struct inode *);
+-
+ static struct kmem_cache * nfs_inode_cachep;
+
+ static inline unsigned long
+@@ -167,7 +165,7 @@ void nfs_zap_mapping(struct inode *inode
+ }
+ }
+
+-static void nfs_zap_acl_cache(struct inode *inode)
++void nfs_zap_acl_cache(struct inode *inode)
+ {
+ void (*clear_acl_cache)(struct inode *);
+
+--- a/fs/nfs/internal.h
++++ b/fs/nfs/internal.h
+@@ -153,6 +153,7 @@ extern void nfs_clear_inode(struct inode
+ #ifdef CONFIG_NFS_V4
+ extern void nfs4_clear_inode(struct inode *);
+ #endif
++void nfs_zap_acl_cache(struct inode *inode);
+
+ /* super.c */
+ extern struct file_system_type nfs_xdev_fs_type;
+--- a/fs/nfs/nfs3acl.c
++++ b/fs/nfs/nfs3acl.c
+@@ -5,6 +5,8 @@
+ #include <linux/posix_acl_xattr.h>
+ #include <linux/nfsacl.h>
+
++#include "internal.h"
++
+ #define NFSDBG_FACILITY NFSDBG_PROC
+
+ ssize_t nfs3_listxattr(struct dentry *dentry, char *buffer, size_t size)
+@@ -205,6 +207,8 @@ struct posix_acl *nfs3_proc_getacl(struc
+ status = nfs_revalidate_inode(server, inode);
+ if (status < 0)
+ return ERR_PTR(status);
++ if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ACL)
++ nfs_zap_acl_cache(inode);
+ acl = nfs3_get_cached_acl(inode, type);
+ if (acl != ERR_PTR(-EAGAIN))
+ return acl;
+@@ -319,9 +323,8 @@ static int nfs3_proc_setacls(struct inod
+ dprintk("NFS call setacl\n");
+ msg.rpc_proc = &server->client_acl->cl_procinfo[ACLPROC3_SETACL];
+ status = rpc_call_sync(server->client_acl, &msg, 0);
+- spin_lock(&inode->i_lock);
+- NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ACCESS;
+- spin_unlock(&inode->i_lock);
++ nfs_access_zap_cache(inode);
++ nfs_zap_acl_cache(inode);
+ dprintk("NFS reply setacl: %d\n", status);
+
+ /* pages may have been allocated at the xdr layer. */
+--- a/fs/nfs/nfs4proc.c
++++ b/fs/nfs/nfs4proc.c
+@@ -2707,6 +2707,8 @@ static ssize_t nfs4_proc_get_acl(struct
+ ret = nfs_revalidate_inode(server, inode);
+ if (ret < 0)
+ return ret;
++ if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ACL)
++ nfs_zap_acl_cache(inode);
+ ret = nfs4_read_cached_acl(inode, buf, buflen);
+ if (ret != -ENOENT)
+ return ret;
+@@ -2734,7 +2736,8 @@ static int __nfs4_proc_set_acl(struct in
+ nfs_inode_return_delegation(inode);
+ buf_to_pages(buf, buflen, arg.acl_pages, &arg.acl_pgbase);
+ ret = rpc_call_sync(NFS_CLIENT(inode), &msg, 0);
+- nfs_zap_caches(inode);
++ nfs_access_zap_cache(inode);
++ nfs_zap_acl_cache(inode);
+ return ret;
+ }
+
--- /dev/null
+From 483d8876f75aa5707a646442377051f1b90db206 Mon Sep 17 00:00:00 2001
+From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Date: Thu, 1 May 2008 08:25:09 +1000
+Subject: POWERPC: PS3: Add time include to lpm
+
+From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+
+commit 483d8876f75aa5707a646442377051f1b90db206 upstream
+
+Add an include <asm/time.h> statement for get_tb().
+
+Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Cc: Jeff Mahoney <jeffm@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ps3/ps3-lpm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/ps3/ps3-lpm.c
++++ b/drivers/ps3/ps3-lpm.c
+@@ -22,6 +22,7 @@
+ #include <linux/module.h>
+ #include <linux/interrupt.h>
+ #include <linux/uaccess.h>
++#include <asm/time.h>
+ #include <asm/ps3.h>
+ #include <asm/lv1call.h>
+ #include <asm/cell-pmu.h>
--- /dev/null
+From e9baf6e59842285bcf9570f5094e4c27674a0f7c Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Thu, 15 May 2008 04:49:12 -0400
+Subject: return to old errno choice in mkdir() et.al.
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit e9baf6e59842285bcf9570f5094e4c27674a0f7c upstream
+
+ In case when both EEXIST and EROFS would apply we used to
+return the former in mkdir(2) and friends. Lest anyone suspects
+us of being consistent, in the same situation knfsd gave clients
+nfs_erofs...
+
+ ro-bind series had switched the syscall side of things to
+returning -EROFS and immediately broke an application - namely,
+mkdir -p. Patch restores the original behaviour...
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Acked-by: Jan Blunck <jblunck@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/namei.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -1904,18 +1904,22 @@ struct dentry *lookup_create(struct name
+ if (IS_ERR(dentry))
+ goto fail;
+
++ if (dentry->d_inode)
++ goto eexist;
+ /*
+ * Special case - lookup gave negative, but... we had foo/bar/
+ * From the vfs_mknod() POV we just have a negative dentry -
+ * all is fine. Let's be bastards - you had / on the end, you've
+ * been asking for (non-existent) directory. -ENOENT for you.
+ */
+- if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
+- goto enoent;
++ if (unlikely(!is_dir && nd->last.name[nd->last.len])) {
++ dput(dentry);
++ dentry = ERR_PTR(-ENOENT);
++ }
+ return dentry;
+-enoent:
++eexist:
+ dput(dentry);
+- dentry = ERR_PTR(-ENOENT);
++ dentry = ERR_PTR(-EEXIST);
+ fail:
+ return dentry;
+ }
--- /dev/null
+From 69cd39e94669e2994277a29249b6ef93b088ddbb Mon Sep 17 00:00:00 2001
+From: Hannes Reinecke <hare@suse.de>
+Date: Fri, 18 Apr 2008 13:57:20 -0700
+Subject: SCSI: megaraid_mbox: fix Dell CERC firmware problem
+
+From: Hannes Reinecke <hare@suse.de>
+
+commit 69cd39e94669e2994277a29249b6ef93b088ddbb upstream
+
+Newer Dell CERC firmware (>= 6.62) implement a random deletion handling
+compatible with the legacy megaraid driver. The legacy handling shifted
+the target ID by 0x80 only for I/O commands (READ/WRITE/etc), whereas
+megaraid_mbox shifts the target ID always if random deletion is supported.
+The resulted in megaraid_mbox sending an INQUIRY to the wrong channel, and
+not finding any devices, obviously.
+
+So we disable the random deletion support if the offending firmware is
+found.
+
+Addresses http://bugzilla.kernel.org/show_bug.cgi?id=6695
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Acked-by: "Yang, Bo" <Bo.Yang@lsi.com>
+Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/megaraid/megaraid_mbox.c | 17 +++++++++++++++++
+ drivers/scsi/megaraid/megaraid_mbox.h | 1 +
+ 2 files changed, 18 insertions(+)
+
+--- a/drivers/scsi/megaraid/megaraid_mbox.c
++++ b/drivers/scsi/megaraid/megaraid_mbox.c
+@@ -3168,6 +3168,23 @@ megaraid_mbox_support_random_del(adapter
+ uint8_t raw_mbox[sizeof(mbox_t)];
+ int rval;
+
++ /*
++ * Newer firmware on Dell CERC expect a different
++ * random deletion handling, so disable it.
++ */
++ if (adapter->pdev->vendor == PCI_VENDOR_ID_AMI &&
++ adapter->pdev->device == PCI_DEVICE_ID_AMI_MEGARAID3 &&
++ adapter->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
++ adapter->pdev->subsystem_device == PCI_SUBSYS_ID_CERC_ATA100_4CH &&
++ (adapter->fw_version[0] > '6' ||
++ (adapter->fw_version[0] == '6' &&
++ adapter->fw_version[2] > '6') ||
++ (adapter->fw_version[0] == '6'
++ && adapter->fw_version[2] == '6'
++ && adapter->fw_version[3] > '1'))) {
++ con_log(CL_DLEVEL1, ("megaraid: disable random deletion\n"));
++ return 0;
++ }
+
+ mbox = (mbox_t *)raw_mbox;
+
+--- a/drivers/scsi/megaraid/megaraid_mbox.h
++++ b/drivers/scsi/megaraid/megaraid_mbox.h
+@@ -88,6 +88,7 @@
+ #define PCI_SUBSYS_ID_PERC3_QC 0x0471
+ #define PCI_SUBSYS_ID_PERC3_DC 0x0493
+ #define PCI_SUBSYS_ID_PERC3_SC 0x0475
++#define PCI_SUBSYS_ID_CERC_ATA100_4CH 0x0511
+
+
+ #define MBOX_MAX_SCSI_CMDS 128 // number of cmds reserved for kernel
romfs_readpage-don-t-report-errors-for-pages-beyond-i_size.patch
linux-2.6-x86-mm-ioremap-64-bit-resource-on-32-bit-kernel.patch
+scsi-megaraid_mbox-fix-dell-cerc-firmware-problem.patch
+return-to-old-errno-choice-in-mkdir-et.al.patch
+powerpc-ps3-add-time-include-to-lpm.patch
+nfs-ensure-we-zap-only-the-access-and-acl-caches-when-setting-new-acls.patch
+jbd-fix-the-way-the-b_modified-flag-is-cleared.patch
+jbd-fix-race-between-free-buffer-and-commit-transaction.patch
+jbd-fix-possible-journal-overflow-issues.patch
+input-i8042-retry-failed-ctr-writes-when-resuming.patch
+input-i8042-add-intel-d845pesv-to-nopnp-list.patch
+input-i8042-add-gericom-bellagio-to-nomux-blacklist.patch
+input-i8042-add-fujitsu-siemens-amilo-pro-v2030-to-nomux-table.patch
+input-i8042-add-fujitsu-siemens-amilo-pro-2010-to-nomux-list.patch
+input-i8042-add-acer-aspire-1360-to-nomux-blacklist.patch
+fat_valid_media-remove-pointless-test.patch
+fat-detect-media-without-partition-table-correctly.patch
+bluetooth-signal-user-space-for-hidp-and-bnep-socket-errors.patch
+bay-exit-if-notify-handler-cannot-be-installed.patch
+ath5k-use-software-encryption-for-now.patch
+add-compat-handler-for-ptrace_getsiginfo.patch
+acpi-reject-below-freezing-temperatures-as-invalid-critical-temperatures.patch