[ofa-general] [RFC, PATCH 18/20] svc: Add xpt_defer transport function
Tom Tucker
tom at opengridcomputing.com
Mon Aug 20 11:58:05 PDT 2007
The RDMA transport includes an ONCRDMA header that precedes the RPC
message. This header needs to be saved in addition to the RPC message
itself. The RPC transport uses page swapping to implement copy avoidance.
These transport dependencies are hidden in the xpt_defer routine allowing
the bulk of the deferral processing to remain in transport independent
code.
Signed-off-by: Tom Tucker <tom at opengridcomputing.com>
---
include/linux/sunrpc/svcsock.h | 5 +++++
net/sunrpc/svcsock.c | 5 +++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/include/linux/sunrpc/svcsock.h b/include/linux/sunrpc/svcsock.h
index a920e9b..145c82b 100644
--- a/include/linux/sunrpc/svcsock.h
+++ b/include/linux/sunrpc/svcsock.h
@@ -51,6 +51,10 @@ struct svc_xprt {
* Accept a pending connection, for connection-oriented transports
*/
int (*xpt_accept)(struct svc_sock *svsk);
+
+ /* RPC defer routine. */
+ struct cache_deferred_req *(*xpt_defer)(struct cache_req *req);
+
/* Transport list link */
struct list_head xpt_list;
};
@@ -138,6 +142,7 @@ void svc_sock_add_connection(struct svc
void svc_sock_add_listener(struct svc_sock *);
/* Add an initialised connectionless svc_sock to the server */
void svc_sock_add_connectionless(struct svc_sock *);
+void svc_revisit(struct cache_deferred_req *dreq, int too_many);
/*
* svc_makesock socket characteristics
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 03ce7e9..b89c577 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -1651,7 +1651,7 @@ svc_recv(struct svc_rqst *rqstp, long ti
clear_bit(SK_OLD, &svsk->sk_flags);
rqstp->rq_secure = svc_port_is_privileged(svc_addr(rqstp));
- rqstp->rq_chandle.defer = svc_defer;
+ rqstp->rq_chandle.defer = svsk->sk_xprt->xpt_defer;
if (serv->sv_stats)
serv->sv_stats->netcnt++;
@@ -2116,7 +2116,7 @@ EXPORT_SYMBOL_GPL(svc_create_svcsock);
* Handle defer and revisit of requests
*/
-static void svc_revisit(struct cache_deferred_req *dreq, int too_many)
+void svc_revisit(struct cache_deferred_req *dreq, int too_many)
{
struct svc_deferred_req *dr = container_of(dreq, struct svc_deferred_req, handle);
struct svc_sock *svsk;
@@ -2136,6 +2136,7 @@ static void svc_revisit(struct cache_def
svc_sock_enqueue(svsk);
svc_sock_put(svsk);
}
+EXPORT_SYMBOL_GPL(svc_revisit);
static struct cache_deferred_req *
svc_defer(struct cache_req *req)
More information about the general
mailing list