summaryrefslogtreecommitdiffstats
path: root/include/linux/sunrpc
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2019-03-09 12:07:17 -0500
committerTrond Myklebust <trond.myklebust@hammerspace.com>2019-03-10 14:08:19 -0400
commit009a82f6437490c262584d65a14094a818bcb747 (patch)
treeb768ab0b1d4b8a102c556f9b3b6fa1052fef933e /include/linux/sunrpc
parent03e51d32da995030a16697038232171807eeb0f2 (diff)
downloadlinux-009a82f6437490c262584d65a14094a818bcb747.tar.gz
linux-009a82f6437490c262584d65a14094a818bcb747.tar.bz2
linux-009a82f6437490c262584d65a14094a818bcb747.zip
SUNRPC: Micro-optimise when the task is known not to be sleeping
In cases where we know the task is not sleeping, try to optimise away the indirect call to task->tk_action() by replacing it with a direct call. Only change tail calls, to allow gcc to perform tail call elimination. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r--include/linux/sunrpc/sched.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h
index 52d41d0c1ae1..ec861cd0cfe8 100644
--- a/include/linux/sunrpc/sched.h
+++ b/include/linux/sunrpc/sched.h
@@ -304,4 +304,12 @@ rpc_clnt_swap_deactivate(struct rpc_clnt *clnt)
}
#endif /* CONFIG_SUNRPC_SWAP */
+static inline bool
+rpc_task_need_resched(const struct rpc_task *task)
+{
+ if (RPC_IS_QUEUED(task) || task->tk_callback)
+ return true;
+ return false;
+}
+
#endif /* _LINUX_SUNRPC_SCHED_H_ */