Home Home > GIT Browse > SLE11-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2019-01-07 11:53:49 +1100
committerNeilBrown <neilb@suse.com>2019-01-07 14:04:49 +1100
commitb44650b2354ea7252ad45b2c4a5ef43fd8d8a67d (patch)
tree6610a7310f4b36c8592a95933b53fb8df550759e
parentb59351e055b3f04e5b1ea995e7dd7010fda7c49f (diff)
NFSv4: Don't exit the state manager without clearing
NFS4CLNT_MANAGER_RUNNING (git-fixes).
-rw-r--r--patches.fixes/NFSv4-Don-t-exit-the-state-manager-without-clearing-.patch45
-rw-r--r--series.conf1
2 files changed, 46 insertions, 0 deletions
diff --git a/patches.fixes/NFSv4-Don-t-exit-the-state-manager-without-clearing-.patch b/patches.fixes/NFSv4-Don-t-exit-the-state-manager-without-clearing-.patch
new file mode 100644
index 0000000000..cb4051cf5a
--- /dev/null
+++ b/patches.fixes/NFSv4-Don-t-exit-the-state-manager-without-clearing-.patch
@@ -0,0 +1,45 @@
+From: Trond Myklebust <trond.myklebust@hammerspace.com>
+Date: Mon, 5 Nov 2018 11:10:50 -0500
+Subject: [PATCH] NFSv4: Don't exit the state manager without clearing
+ NFS4CLNT_MANAGER_RUNNING
+Git-commit: 21a446cf186570168b7281b154b1993968598aca
+Patch-mainline: v4.20
+References: git-fixes
+
+If we exit the NFSv4 state manager due to a umount, then we can end up
+leaving the NFS4CLNT_MANAGER_RUNNING flag set. If another mount causes
+the nfs4_client to be rereferenced before it is destroyed, then we end
+up never being able to recover state.
+
+Fixes: 47c2199b6eb5 ("NFSv4.1: Ensure state manager thread dies on last ...")
+Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
+Cc: stable@vger.kernel.org # v4.15+
+Acked-by: NeilBrown <neilb@suse.com>
+
+---
+ fs/nfs/nfs4state.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/fs/nfs/nfs4state.c
++++ b/fs/nfs/nfs4state.c
+@@ -1814,15 +1814,17 @@ static void nfs4_state_manager(struct nf
+ nfs4_clear_state_manager_bit(clp);
+ /* Did we race with an attempt to give us more work? */
+ if (clp->cl_state == 0)
+- break;
++ return;
+ if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
+- break;
++ return;
+ } while (atomic_read(&clp->cl_count) > 1);
+- return;
++ goto out_drain;
++
+ out_error:
+ printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s"
+ " with error %d\n", clp->cl_hostname, -status);
+ ssleep(1);
++out_drain:
+ nfs4_end_drain_session(clp);
+ nfs4_clear_state_manager_bit(clp);
+ }
diff --git a/series.conf b/series.conf
index ec43fabcaf..6199475857 100644
--- a/series.conf
+++ b/series.conf
@@ -6910,6 +6910,7 @@
patches.fixes/nlm-Ensure-callback-code-also-checks-that-the-files-.patch
patches.fixes/svc-Avoid-garbage-replies-when-pc_func-returns-rpc_d.patch
patches.fixes/svcrpc-don-t-leak-contexts-on-PROC_DESTROY.patch
+ patches.fixes/NFSv4-Don-t-exit-the-state-manager-without-clearing-.patch
########################################################
# Netfilter