Browse Source

SUNRPC: Clean up tk_pid allocation and make it lockless

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Trond Myklebust 18 years ago
parent
commit
c44fe70553
1 changed files with 15 additions and 7 deletions
  1. 15 7
      net/sunrpc/sched.c

+ 15 - 7
net/sunrpc/sched.c

@@ -25,7 +25,6 @@
 #ifdef RPC_DEBUG
 #ifdef RPC_DEBUG
 #define RPCDBG_FACILITY		RPCDBG_SCHED
 #define RPCDBG_FACILITY		RPCDBG_SCHED
 #define RPC_TASK_MAGIC_ID	0xf00baa
 #define RPC_TASK_MAGIC_ID	0xf00baa
-static int			rpc_task_id;
 #endif
 #endif
 
 
 /*
 /*
@@ -268,17 +267,26 @@ static int rpc_wait_bit_interruptible(void *word)
 	return 0;
 	return 0;
 }
 }
 
 
+#ifdef RPC_DEBUG
+static void rpc_task_set_debuginfo(struct rpc_task *task)
+{
+	static atomic_t rpc_pid;
+
+	task->tk_magic = RPC_TASK_MAGIC_ID;
+	task->tk_pid = atomic_inc_return(&rpc_pid);
+}
+#else
+static inline void rpc_task_set_debuginfo(struct rpc_task *task)
+{
+}
+#endif
+
 static void rpc_set_active(struct rpc_task *task)
 static void rpc_set_active(struct rpc_task *task)
 {
 {
 	struct rpc_clnt *clnt;
 	struct rpc_clnt *clnt;
 	if (test_and_set_bit(RPC_TASK_ACTIVE, &task->tk_runstate) != 0)
 	if (test_and_set_bit(RPC_TASK_ACTIVE, &task->tk_runstate) != 0)
 		return;
 		return;
-#ifdef RPC_DEBUG
-	task->tk_magic = RPC_TASK_MAGIC_ID;
-	spin_lock(&rpc_sched_lock);
-	task->tk_pid = rpc_task_id++;
-	spin_unlock(&rpc_sched_lock);
-#endif
+	rpc_task_set_debuginfo(task);
 	/* Add to global list of all tasks */
 	/* Add to global list of all tasks */
 	clnt = task->tk_client;
 	clnt = task->tk_client;
 	if (clnt != NULL) {
 	if (clnt != NULL) {