]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.26 patches from suse kernels
authorGreg Kroah-Hartman <gregkh@suse.de>
Sat, 2 Aug 2008 04:04:47 +0000 (21:04 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 2 Aug 2008 04:04:47 +0000 (21:04 -0700)
queue-2.6.26/add-compat-handler-for-ptrace_getsiginfo.patch [new file with mode: 0644]
queue-2.6.26/bluetooth-signal-user-space-for-hidp-and-bnep-socket-errors.patch [new file with mode: 0644]
queue-2.6.26/input-i8042-add-acer-aspire-1360-to-nomux-blacklist.patch [new file with mode: 0644]
queue-2.6.26/input-i8042-add-gericom-bellagio-to-nomux-blacklist.patch [new file with mode: 0644]
queue-2.6.26/input-i8042-add-intel-d845pesv-to-nopnp-list.patch [new file with mode: 0644]
queue-2.6.26/jbd-fix-race-between-free-buffer-and-commit-transaction.patch [new file with mode: 0644]
queue-2.6.26/nfs-ensure-we-zap-only-the-access-and-acl-caches-when-setting-new-acls.patch [new file with mode: 0644]
queue-2.6.26/series

diff --git a/queue-2.6.26/add-compat-handler-for-ptrace_getsiginfo.patch b/queue-2.6.26/add-compat-handler-for-ptrace_getsiginfo.patch
new file mode 100644 (file)
index 0000000..4a701f3
--- /dev/null
@@ -0,0 +1,87 @@
+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:
diff --git a/queue-2.6.26/bluetooth-signal-user-space-for-hidp-and-bnep-socket-errors.patch b/queue-2.6.26/bluetooth-signal-user-space-for-hidp-and-bnep-socket-errors.patch
new file mode 100644 (file)
index 0000000..7dd821d
--- /dev/null
@@ -0,0 +1,62 @@
+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);
diff --git a/queue-2.6.26/input-i8042-add-acer-aspire-1360-to-nomux-blacklist.patch b/queue-2.6.26/input-i8042-add-acer-aspire-1360-to-nomux-blacklist.patch
new file mode 100644 (file)
index 0000000..7477de6
--- /dev/null
@@ -0,0 +1,37 @@
+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
+@@ -291,6 +291,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"),
++              },
++      },
+       { }
+ };
diff --git a/queue-2.6.26/input-i8042-add-gericom-bellagio-to-nomux-blacklist.patch b/queue-2.6.26/input-i8042-add-gericom-bellagio-to-nomux-blacklist.patch
new file mode 100644 (file)
index 0000000..6de9205
--- /dev/null
@@ -0,0 +1,37 @@
+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
+@@ -303,6 +303,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
diff --git a/queue-2.6.26/input-i8042-add-intel-d845pesv-to-nopnp-list.patch b/queue-2.6.26/input-i8042-add-intel-d845pesv-to-nopnp-list.patch
new file mode 100644 (file)
index 0000000..8960db4
--- /dev/null
@@ -0,0 +1,100 @@
+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>
+@@ -294,14 +294,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.
+@@ -356,7 +361,6 @@ static struct dmi_system_id __initdata i
+ #endif /* CONFIG_X86 */
+-
+ #ifdef CONFIG_PNP
+ #include <linux/pnp.h>
+@@ -466,6 +470,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;
+@@ -591,15 +600,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 */
diff --git a/queue-2.6.26/jbd-fix-race-between-free-buffer-and-commit-transaction.patch b/queue-2.6.26/jbd-fix-race-between-free-buffer-and-commit-transaction.patch
new file mode 100644 (file)
index 0000000..83ae77c
--- /dev/null
@@ -0,0 +1,137 @@
+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
+@@ -1648,12 +1648,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,
+@@ -1682,9 +1712,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;
+@@ -1713,7 +1745,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
+@@ -2581,9 +2581,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)
+ {
diff --git a/queue-2.6.26/nfs-ensure-we-zap-only-the-access-and-acl-caches-when-setting-new-acls.patch b/queue-2.6.26/nfs-ensure-we-zap-only-the-access-and-acl-caches-when-setting-new-acls.patch
new file mode 100644 (file)
index 0000000..8ad788b
--- /dev/null
@@ -0,0 +1,105 @@
+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
+@@ -150,6 +150,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
+@@ -2706,6 +2706,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;
+@@ -2733,7 +2735,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;
+ }
index f146a07733708368ecf4e505c95fb24ad697c506..56200b533c41873a4c4d434d07b053bfd7605bf8 100644 (file)
@@ -9,3 +9,10 @@ kprobe-smoke-test-lockdep-warning.patch
 netfilter-xt_time-fix-time-s-time_mt-s-use-of-do_div.patch
 linear-correct-disk-numbering-error-check.patch
 scsi-ch-fix-ch_remove-oops.patch
+nfs-ensure-we-zap-only-the-access-and-acl-caches-when-setting-new-acls.patch
+jbd-fix-race-between-free-buffer-and-commit-transaction.patch
+input-i8042-add-intel-d845pesv-to-nopnp-list.patch
+input-i8042-add-gericom-bellagio-to-nomux-blacklist.patch
+input-i8042-add-acer-aspire-1360-to-nomux-blacklist.patch
+bluetooth-signal-user-space-for-hidp-and-bnep-socket-errors.patch
+add-compat-handler-for-ptrace_getsiginfo.patch