diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-03-09 12:07:17 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-03-10 14:08:19 -0400 |
commit | 009a82f6437490c262584d65a14094a818bcb747 (patch) | |
tree | b768ab0b1d4b8a102c556f9b3b6fa1052fef933e /include/linux/sunrpc | |
parent | 03e51d32da995030a16697038232171807eeb0f2 (diff) | |
download | linux-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.h | 8 |
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_ */ |