OSDN Git Service

xprtrdma: Introduce ro_unmap_sync method
authorChuck Lever <chuck.lever@oracle.com>
Wed, 16 Dec 2015 22:22:39 +0000 (17:22 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 18 Dec 2015 20:34:33 +0000 (15:34 -0500)
In the current xprtrdma implementation, some memreg strategies
implement ro_unmap synchronously (the MR is knocked down before the
method returns) and some asynchonously (the MR will be knocked down
and returned to the pool in the background).

To guarantee the MR is truly invalid before the RPC consumer is
allowed to resume execution, we need an unmap method that is
always synchronous, invoked from the RPC/RDMA reply handler.

The new method unmaps all MRs for an RPC. The existing ro_unmap
method unmaps only one MR at a time.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/xprt_rdma.h

index 5c1e0c6..c32cba3 100644 (file)
@@ -368,6 +368,8 @@ struct rpcrdma_xprt;
 struct rpcrdma_memreg_ops {
        int             (*ro_map)(struct rpcrdma_xprt *,
                                  struct rpcrdma_mr_seg *, int, bool);
+       void            (*ro_unmap_sync)(struct rpcrdma_xprt *,
+                                        struct rpcrdma_req *);
        int             (*ro_unmap)(struct rpcrdma_xprt *,
                                    struct rpcrdma_mr_seg *);
        int             (*ro_open)(struct rpcrdma_ia *,