Home Home > GIT Browse
summaryrefslogtreecommitdiff
authorNeilBrown <neilb@suse.de>2011-02-08 06:02:54 (GMT)
committer NeilBrown <neilb@suse.de>2011-02-08 06:02:54 (GMT)
commit1e04cd848db1f4c29904f547413c5f388fae8387 (patch) (side-by-side diff)
treef21e712e9b7de3fd65db0ff7e35a92de05140829
parent124a070aadef0eccbe2478279a4d2d93ecaff065 (diff)
- patches.fixes/nfs-idmap-fix: Fix the wait in idmap_lookuprpm-2.6.16.60-0.81
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kernel-source.changes6
-rw-r--r--patches.fixes/nfs-idmap-fix28
-rw-r--r--series.conf1
3 files changed, 35 insertions, 0 deletions
diff --git a/kernel-source.changes b/kernel-source.changes
index c4b18e6..5290dff 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Tue Feb 8 07:02:49 CET 2011 - nfbrown@suse.de
+
+- patches.fixes/nfs-idmap-fix: Fix the wait in idmap_lookup
+ (bnc#663198).
+
+-------------------------------------------------------------------
Mon Feb 7 12:14:59 CET 2011 - hare@suse.de
- patches.fixes/megaraid_sas-reset-msi-x-after-kdump: kdump
diff --git a/patches.fixes/nfs-idmap-fix b/patches.fixes/nfs-idmap-fix
new file mode 100644
index 0000000..856bcd7
--- a/dev/null
+++ b/patches.fixes/nfs-idmap-fix
@@ -0,0 +1,28 @@
+From: NeilBrown <neilb@suse.de>
+Subject: Fix the wait in idmap_lookup
+Patch-mainline: not-needed
+References: bnc#663198
+
+Waiting for the item to be VALID is wrong as it could already be
+'valid', just 'expired'. Rather we should wait for the upcall to no
+longer be 'pending', as that confirms that whatever we no see is all
+that we will get.
+
+Acked-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Neil Brown <neilb@suse.de>
+
+---
+ fs/nfsd/nfs4idmap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.16-SLES10_SP4_BRANCH.orig/fs/nfsd/nfs4idmap.c
++++ linux-2.6.16-SLES10_SP4_BRANCH/fs/nfsd/nfs4idmap.c
+@@ -512,7 +512,7 @@ idmap_lookup(struct svc_rqst *rqstp,
+ ret = do_idmap_lookup(lookup_fn, key, detail, item, mdr);
+ if (ret == -EAGAIN) {
+ wait_event_interruptible_timeout(mdr->waitq,
+- test_bit(CACHE_VALID, &(*item)->h.flags), 1 * HZ);
++ !test_bit(CACHE_PENDING, &(*item)->h.flags), 1 * HZ);
+ ret = do_idmap_lookup_nowait(lookup_fn, key, detail, item);
+ }
+ put_mdr(mdr);
diff --git a/series.conf b/series.conf
index 205c72d..6019229 100644
--- a/series.conf
+++ b/series.conf
@@ -3806,6 +3806,7 @@
patches.fixes/sunrpc-monotonic-expiry
patches.fixes/sunrpc-fix-rpc_execute-race
patches.fixes/nfsd4-fix-bad-seqid-on-lock
+ patches.fixes/nfs-idmap-fix
########################################################
# cifs and smbfs patches