All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1442613607.11370.18.camel@primarydata.com>

diff --git a/a/1.txt b/N1/1.txt
index 399fb69..386ea44 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -136,3 +136,54 @@ automatically any time the server initiates a close, while still
 preventing it during shutdown.
 
 8<-------------------------------------------------------------------
+>From 3e1c9d8092e2fa4509d84a00fcf21e7e0c581fe2 Mon Sep 17 00:00:00 2001
+From: Trond Myklebust <trond.myklebust@primarydata.com>
+Date: Fri, 18 Sep 2015 15:53:24 -0400
+Subject: [PATCH] SUNRPC: Lock the transport layer on shutdown
+
+Avoid all races with the connect/disconnect handlers by taking the
+transport lock.
+
+Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
+---
+ net/sunrpc/xprt.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
+index ab5dd621ae0c..2e98f4a243e5 100644
+--- a/net/sunrpc/xprt.c
++++ b/net/sunrpc/xprt.c
+@@ -614,6 +614,7 @@ static void xprt_autoclose(struct work_struct *work)
+ 	clear_bit(XPRT_CLOSE_WAIT, &xprt->state);
+ 	xprt->ops->close(xprt);
+ 	xprt_release_write(xprt, NULL);
++	wake_up_bit(&xprt->state, XPRT_LOCKED);
+ }
+ 
+ /**
+@@ -723,6 +724,7 @@ void xprt_unlock_connect(struct rpc_xprt *xprt, void *cookie)
+ 	xprt->ops->release_xprt(xprt, NULL);
+ out:
+ 	spin_unlock_bh(&xprt->transport_lock);
++	wake_up_bit(&xprt->state, XPRT_LOCKED);
+ }
+ 
+ /**
+@@ -1394,6 +1396,10 @@ out:
+ static void xprt_destroy(struct rpc_xprt *xprt)
+ {
+ 	dprintk("RPC:       destroying transport %p\n", xprt);
++
++	/* Exclude transport connect/disconnect handlers */
++	wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_UNINTERRUPTIBLE);
++
+ 	del_timer_sync(&xprt->timer);
+ 
+ 	rpc_xprt_debugfs_unregister(xprt);
+-- 
+2.4.3
+
+-- 
+Trond Myklebust
+Linux NFS client maintainer, PrimaryData
+trond.myklebust@primarydata.com
diff --git a/a/content_digest b/N1/content_digest
index 2f10cc0..7e72d44 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -153,6 +153,57 @@
  "automatically any time the server initiates a close, while still\n"
  "preventing it during shutdown.\n"
  "\n"
- 8<-------------------------------------------------------------------
+ "8<-------------------------------------------------------------------\n"
+ ">From 3e1c9d8092e2fa4509d84a00fcf21e7e0c581fe2 Mon Sep 17 00:00:00 2001\n"
+ "From: Trond Myklebust <trond.myklebust@primarydata.com>\n"
+ "Date: Fri, 18 Sep 2015 15:53:24 -0400\n"
+ "Subject: [PATCH] SUNRPC: Lock the transport layer on shutdown\n"
+ "\n"
+ "Avoid all races with the connect/disconnect handlers by taking the\n"
+ "transport lock.\n"
+ "\n"
+ "Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>\n"
+ "---\n"
+ " net/sunrpc/xprt.c | 6 ++++++\n"
+ " 1 file changed, 6 insertions(+)\n"
+ "\n"
+ "diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c\n"
+ "index ab5dd621ae0c..2e98f4a243e5 100644\n"
+ "--- a/net/sunrpc/xprt.c\n"
+ "+++ b/net/sunrpc/xprt.c\n"
+ "@@ -614,6 +614,7 @@ static void xprt_autoclose(struct work_struct *work)\n"
+ " \tclear_bit(XPRT_CLOSE_WAIT, &xprt->state);\n"
+ " \txprt->ops->close(xprt);\n"
+ " \txprt_release_write(xprt, NULL);\n"
+ "+\twake_up_bit(&xprt->state, XPRT_LOCKED);\n"
+ " }\n"
+ " \n"
+ " /**\n"
+ "@@ -723,6 +724,7 @@ void xprt_unlock_connect(struct rpc_xprt *xprt, void *cookie)\n"
+ " \txprt->ops->release_xprt(xprt, NULL);\n"
+ " out:\n"
+ " \tspin_unlock_bh(&xprt->transport_lock);\n"
+ "+\twake_up_bit(&xprt->state, XPRT_LOCKED);\n"
+ " }\n"
+ " \n"
+ " /**\n"
+ "@@ -1394,6 +1396,10 @@ out:\n"
+ " static void xprt_destroy(struct rpc_xprt *xprt)\n"
+ " {\n"
+ " \tdprintk(\"RPC:       destroying transport %p\\n\", xprt);\n"
+ "+\n"
+ "+\t/* Exclude transport connect/disconnect handlers */\n"
+ "+\twait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_UNINTERRUPTIBLE);\n"
+ "+\n"
+ " \tdel_timer_sync(&xprt->timer);\n"
+ " \n"
+ " \trpc_xprt_debugfs_unregister(xprt);\n"
+ "-- \n"
+ "2.4.3\n"
+ "\n"
+ "-- \n"
+ "Trond Myklebust\n"
+ "Linux NFS client maintainer, PrimaryData\n"
+ trond.myklebust@primarydata.com
 
-9404b220b2a5f2552f1e8175f604634b63a1d7b82a4fd532ec7a2515caeff296
+8dc1efaf851a48bdd68e4ab5d425f6dbdcad90cd5d20ceb60da7d5adb7216eb8

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.