summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-07 08:35:22 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-09-30 15:35:16 -0400
commit95f7691daa57bbd68caac2bdad79e0b08f4d46c1 (patch)
tree869abdba60f556d70cab5a6250bd373aaccfcb7a /include
parentbd79bc579ca5cd35c08ab4f660085b0744bd5cfd (diff)
downloadlinux-stable-95f7691daa57bbd68caac2bdad79e0b08f4d46c1.tar.gz
linux-stable-95f7691daa57bbd68caac2bdad79e0b08f4d46c1.tar.bz2
linux-stable-95f7691daa57bbd68caac2bdad79e0b08f4d46c1.zip
SUNRPC: Convert xprt receive queue to use an rbtree
If the server is slow, we can find ourselves with quite a lot of entries on the receive queue. Converting the search from an O(n) to O(log(n)) can make a significant difference, particularly since we have to hold a number of locks while searching. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/sunrpc/xprt.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h
index 823860cce0bc..9be399020dab 100644
--- a/include/linux/sunrpc/xprt.h
+++ b/include/linux/sunrpc/xprt.h
@@ -85,7 +85,7 @@ struct rpc_rqst {
union {
struct list_head rq_list; /* Slot allocation list */
- struct list_head rq_recv; /* Receive queue */
+ struct rb_node rq_recv; /* Receive queue */
};
struct list_head rq_xmit; /* Send queue */
@@ -260,7 +260,7 @@ struct rpc_xprt {
* backchannel rpc_rqst's */
#endif /* CONFIG_SUNRPC_BACKCHANNEL */
- struct list_head recv_queue; /* Receive queue */
+ struct rb_root recv_queue; /* Receive queue */
struct {
unsigned long bind_count, /* total number of binds */