No subject


Sun Oct 21 04:25:44 EDT 2007


as the first line of your message, standard scripts (like git-am) will
automatically grab that name to use as the "Author" of the imported
commit.  (If it doesn't find something like that on the first line then
it'll just take the author from the From: line in the mail header.)

--b.

> 
> Signed-off-by: Ricardo Labiaga <ricardo.labiaga at netapp.com>
> ---
>  net/sunrpc/backchannel_rqst.c |  158 +++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 158 insertions(+), 0 deletions(-)
>  create mode 100644 net/sunrpc/backchannel_rqst.c
> 
> diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
> new file mode 100644
> index 0000000..214e36b
> --- /dev/null
> +++ b/net/sunrpc/backchannel_rqst.c
> @@ -0,0 +1,158 @@
> +/*
> + * This file is distributed under GPL. Please see Documentation/COPYING for
> + * details.
> + *
> + * Author: Rahul Iyer <iyer at netapp.com>
> + */
> +
> +#include <linux/types.h>
> +#include <linux/slab.h>
> +#include <linux/capability.h>
> +#include <linux/sched.h>
> +#include <linux/pagemap.h>
> +#include <linux/errno.h>
> +#include <linux/socket.h>
> +#include <linux/in.h>
> +#include <linux/net.h>
> +#include <linux/mm.h>
> +#include <linux/tcp.h>
> +#include <linux/sunrpc/clnt.h>
> +#include <linux/sunrpc/sched.h>
> +#include <linux/sunrpc/xprt.h>
> +#include <linux/file.h>
> +//#include <linux/sunrpc/xprt_params.h>
> +#include <linux/sunrpc/svcsock.h>
> +#include <linux/mempool.h>
> +
> +#include <net/sock.h>
> +#include <net/checksum.h>
> +#include <net/tcp.h>
> +
> +#ifdef RPC_DEBUG
> +# undef  RPC_DEBUG_DATA
> +# define RPCDBG_FACILITY	RPCDBG_TRANS
> +#endif
> +
> +#if defined (CONFIG_NFS_V4_1)
> +
> +#define MAX_BC_SLABNAME_SIZE		128
> +int xprt_setup_backchannel(struct rpc_xprt *xprt, unsigned int min_reqs)
> +{
> +	char slab_name[MAX_BC_SLABNAME_SIZE];
> +
> +	snprintf(slab_name, MAX_BC_SLABNAME_SIZE,
> +					"bc_request_cache(xprt:%p)\n", xprt);
> +
> +	xprt->bc_slab = kmem_cache_create(slab_name,
> +					sizeof(struct rpc_rqst), 0, 0, NULL);
> +	if (!xprt->bc_slab) {
> +		printk(KERN_ERR "Failed to create slab for backchannel!\n");
> +		goto out;
> +	}
> +
> +	xprt->bc_mempool = mempool_create(min_reqs, mempool_alloc_slab,
> +					mempool_free_slab,
> +					xprt->bc_slab);
> +	if (!xprt->bc_mempool) {
> +		printk(KERN_ERR "Failed to create mempool for callbacks!\n");
> +		goto out_free;
> +	}
> +
> +	return 0;
> +
> +out_free:
> +	kmem_cache_destroy(xprt->bc_slab);
> +out:
> +	return -1;
> +}
> +
> +EXPORT_SYMBOL(xprt_setup_backchannel);
> +
> +void xprt_destroy_backchannel(struct rpc_xprt *xprt)
> +{
> +	/*
> +	 * Either of these could be NULL in the case of
> +	 * the user hitting ^C
> +	 */
> +	if (xprt->bc_mempool)
> +		mempool_destroy(xprt->bc_mempool);
> +
> +	if (xprt->bc_slab)
> +		kmem_cache_destroy(xprt->bc_slab);
> +}
> +
> +EXPORT_SYMBOL(xprt_destroy_backchannel);
> +
> +struct rpc_rqst *xprt_alloc_bc_request(struct rpc_xprt *xprt)
> +{
> +/*
> +	struct rpc_rqst *req;
> +	struct page *page;
> +	struct xdr_buf *xbufp;
> +	struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
> +
> +
> +	BUG_ON(xprt->bc_mempool == NULL);
> +
> +	req = mempool_alloc(xprt->bc_mempool, GFP_ATOMIC);
> +
> +	if (!req)
> +		goto out;
> +
> +	req->rq_xprt = xprt;
> +	req->rq_xid = transport->tcp_xid;
> +
> +	page = alloc_page(GFP_ATOMIC);
> +
> +	if (!page)
> +		goto out_free;
> +
> +	xbufp = &req->rq_private_buf;
> +
> +	xbufp->head[0].iov_base = page_address(page);
> +	xbufp->head[0].iov_len = PAGE_SIZE;
> +	xbufp->tail[0].iov_len = 0;
> +	xbufp->page_len = 0;
> +	xbufp->len = PAGE_SIZE;
> +	xbufp->buflen = PAGE_SIZE;
> +
> +	page = alloc_page(GFP_ATOMIC);
> +
> +	if (!page)
> +		goto out_free_page;
> +
> +	xbufp = &req->rq_snd_buf;
> +
> +	xbufp->head[0].iov_base = page_address(page);
> +	xbufp->head[0].iov_len = 0;
> +	xbufp->tail[0].iov_len = 0;
> +	xbufp->page_len = 0;
> +	xbufp->len = 0;
> +	xbufp->buflen = PAGE_SIZE;
> +	return req;
> +
> +out_free_page:
> +	free_page((unsigned long)xbufp->head[0].iov_base);
> +out_free:
> +	mempool_free(req, xprt->bc_mempool);
> +out:
> +*/
> +	return NULL;
> +}
> +
> +void xprt_free_bc_request(struct rpc_rqst *req)
> +{
> +	struct xdr_buf *xbufp;
> +	struct rpc_xprt *xprt = req->rq_xprt;
> +
> +	xbufp = &req->rq_private_buf;
> +	free_page((unsigned long)xbufp->head[0].iov_base);
> +	
> +	xbufp = &req->rq_snd_buf;
> +	free_page((unsigned long)xbufp->head[0].iov_base);
> +
> +	mempool_free(req, xprt->bc_mempool);
> +}
> +
> +#endif
> +
> -- 
> 1.5.2
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs


More information about the pNFS mailing list