diff options
author | Tom Tucker <tom@opengridcomputing.com> | 2008-05-28 13:54:04 -0500 |
---|---|---|
committer | Tom Tucker <tom@opengridcomputing.com> | 2008-07-02 15:01:53 -0500 |
commit | ab96dddbedf4bb8a7a0fe44012efc1d99598c36f (patch) | |
tree | bb3fcfe50264d9a0eb63b768aab8154d70185975 /net/sunrpc/xprtrdma/svc_rdma_transport.c | |
parent | e1441b9a41c33aa9236008a7cfe49a8e723fb397 (diff) | |
download | linux-ab96dddbedf4bb8a7a0fe44012efc1d99598c36f.tar.gz linux-ab96dddbedf4bb8a7a0fe44012efc1d99598c36f.tar.bz2 linux-ab96dddbedf4bb8a7a0fe44012efc1d99598c36f.zip |
svcrdma: Add a type for keeping NFS RPC mapping
Create a new data structure to hold the remote client address space
to local server address space mapping.
Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Diffstat (limited to 'net/sunrpc/xprtrdma/svc_rdma_transport.c')
-rw-r--r-- | net/sunrpc/xprtrdma/svc_rdma_transport.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c index e132509d1db0..ae90758d8e9b 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c @@ -173,6 +173,32 @@ void svc_rdma_put_context(struct svc_rdma_op_ctxt *ctxt, int free_pages) atomic_dec(&xprt->sc_ctxt_used); } +/* Temporary NFS request map cache. Created in svc_rdma.c */ +extern struct kmem_cache *svc_rdma_map_cachep; + +/* + * Temporary NFS req mappings are shared across all transport + * instances. These are short lived and should be bounded by the number + * of concurrent server threads * depth of the SQ. + */ +struct svc_rdma_req_map *svc_rdma_get_req_map(void) +{ + struct svc_rdma_req_map *map; + while (1) { + map = kmem_cache_alloc(svc_rdma_map_cachep, GFP_KERNEL); + if (map) + break; + schedule_timeout_uninterruptible(msecs_to_jiffies(500)); + } + map->count = 0; + return map; +} + +void svc_rdma_put_req_map(struct svc_rdma_req_map *map) +{ + kmem_cache_free(svc_rdma_map_cachep, map); +} + /* ib_cq event handler */ static void cq_event_handler(struct ib_event *event, void *context) { |