Re: [pnfs] [RFC 11/39] nfs41: Backchannel callback service helper routines

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2009-05-01 at 02:20 +0300, Benny Halevy wrote:
> From: Ricardo Labiaga <Ricardo.Labiaga@xxxxxxxxxx>
> 
> Executes the backchannel task on the RPC state machine using
> the existing open connection previously established by the client.
> 
> Signed-off-by: Ricardo Labiaga <ricardo.labiaga@xxxxxxxxxx>
> 
> nfs41: Add bc_svc.o to sunrpc Makefile.
> 
> [nfs41: bc_send() does not need to be exported outside RPC module]
> [nfs41: xprt_free_bc_request() need not be exported outside RPC module]
> Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@xxxxxxxxxx>
> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx>
> ---
>  include/linux/sunrpc/bc_xprt.h |    3 +
>  net/sunrpc/Makefile            |    2 +-
>  net/sunrpc/backchannel_rqst.c  |    1 -
>  net/sunrpc/bc_svc.c            |   80 ++++++++++++++++++++++++++++++++++++++++
>  net/sunrpc/xprtsock.c          |    3 +
>  5 files changed, 87 insertions(+), 2 deletions(-)
>  create mode 100644 net/sunrpc/bc_svc.c
> 
> diff --git a/include/linux/sunrpc/bc_xprt.h b/include/linux/sunrpc/bc_xprt.h
> index 1c1746a..3016c00 100644
> --- a/include/linux/sunrpc/bc_xprt.h
> +++ b/include/linux/sunrpc/bc_xprt.h
> @@ -29,12 +29,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>  
>  #include <linux/sunrpc/svcsock.h>
>  #include <linux/sunrpc/xprt.h>
> +#include <linux/sunrpc/sched.h>
>  
>  #ifdef CONFIG_NFS_V4_1
>  struct rpc_rqst *xprt_alloc_bc_request(struct rpc_xprt *xprt);
>  void xprt_free_bc_request(struct rpc_rqst *req);
>  int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
>  void xprt_destroy_backchannel(struct rpc_xprt *, int max_reqs);
> +void bc_release_request(struct rpc_task *);
> +int bc_send(struct rpc_rqst *req);
>  #else /* CONFIG_NFS_V4_1 */
>  static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
>  					 unsigned int min_reqs)
> diff --git a/net/sunrpc/Makefile b/net/sunrpc/Makefile
> index 4a01f96..db73fd2 100644
> --- a/net/sunrpc/Makefile
> +++ b/net/sunrpc/Makefile
> @@ -13,6 +13,6 @@ sunrpc-y := clnt.o xprt.o socklib.o xprtsock.o sched.o \
>  	    rpcb_clnt.o timer.o xdr.o \
>  	    sunrpc_syms.o cache.o rpc_pipe.o \
>  	    svc_xprt.o
> -sunrpc-$(CONFIG_NFS_V4_1) += backchannel_rqst.o
> +sunrpc-$(CONFIG_NFS_V4_1) += backchannel_rqst.o bc_svc.o
>  sunrpc-$(CONFIG_PROC_FS) += stats.o
>  sunrpc-$(CONFIG_SYSCTL) += sysctl.o
> diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
> index 7d7708a..92fb3bd 100644
> --- a/net/sunrpc/backchannel_rqst.c
> +++ b/net/sunrpc/backchannel_rqst.c
> @@ -265,6 +265,5 @@ void xprt_free_bc_request(struct rpc_rqst *req)
>  	list_add(&req->rq_bc_pa_list, &xprt->bc_pa_list);
>  	spin_unlock_bh(&xprt->bc_pa_lock);
>  }
> -EXPORT_SYMBOL(xprt_free_bc_request);

Err.... That's random... What is there in this patch that suddenly makes
the export unnecessary?

>  #endif /* CONFIG_NFS_V4_1 */
> diff --git a/net/sunrpc/bc_svc.c b/net/sunrpc/bc_svc.c
> new file mode 100644
> index 0000000..b13f51d
> --- /dev/null
> +++ b/net/sunrpc/bc_svc.c
> @@ -0,0 +1,80 @@
> +/******************************************************************************
> +
> +(c) 2007 Network Appliance, Inc.  All Rights Reserved.

More references to historic entities...

> +
> +Network Appliance provides this source code under the GPL v2 License.
> +The GPL v2 license is available at
> +http://opensource.org/licenses/gpl-license.php.
> +
> +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
> +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> +
> +******************************************************************************/
> +
> +/*
> + * The NFSv4.1 callback service helper routines.
> + * They implement the transport level processing required to send the
> + * reply over an existing open connection previously established by the client.
> + */
> +
> +#if defined(CONFIG_NFS_V4_1)
> +
> +#include <linux/module.h>
> +
> +#include <linux/sunrpc/xprt.h>
> +#include <linux/sunrpc/sched.h>
> +#include <linux/sunrpc/bc_xprt.h>
> +
> +#define RPCDBG_FACILITY	RPCDBG_SVCDSP
> +
> +void bc_release_request(struct rpc_task *task)
> +{
> +	struct rpc_rqst *req = task->tk_rqstp;
> +
> +	dprintk("RPC:       bc_release_request: task= %p\n", task);
> +
> +	/*
> +	 * Release this request only if it's a backchannel
> +	 * preallocated request
> +	 */
> +	if (!bc_prealloc(req))
> +		return;
> +	xprt_free_bc_request(req);
> +}
> +
> +/* Empty callback ops */
> +static const struct rpc_call_ops nfs41_callback_ops = {
> +};
> +
> +
> +/*
> + * Send the callback reply
> + */
> +int bc_send(struct rpc_rqst *req)
> +{
> +	struct rpc_task *task;
> +	int ret;
> +
> +	dprintk("RPC:       bc_send req= %p\n", req);
> +	task = rpc_run_bc_task(req, &nfs41_callback_ops);
> +	if (IS_ERR(task))
> +		ret = PTR_ERR(task);
> +	else {
> +		BUG_ON(atomic_read(&task->tk_count) != 1);
> +		ret = task->tk_status;
> +		rpc_put_task(task);
> +	}
> +	return ret;
> +	dprintk("RPC:       bc_send ret= %d \n", ret);
> +}
> +
> +#endif /* CONFIG_NFS_V4_1 */
> diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
> index 403ebda..5bf9e66 100644
> --- a/net/sunrpc/xprtsock.c
> +++ b/net/sunrpc/xprtsock.c
> @@ -2145,6 +2145,9 @@ static struct rpc_xprt_ops xs_tcp_ops = {
>  	.buf_free		= rpc_free,
>  	.send_request		= xs_tcp_send_request,
>  	.set_retrans_timeout	= xprt_set_retrans_timeout_def,
> +#if defined(CONFIG_NFS_V4_1)
> +	.release_request	= bc_release_request,
> +#endif /* CONFIG_NFS_V4_1 */
>  	.close			= xs_tcp_shutdown,
>  	.destroy		= xs_destroy,
>  	.print_stats		= xs_tcp_print_stats,

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux