From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Aneesh Kumar K. V" Subject: Re: [PATCH] [net/9p] Small non-IO PDUs for zero-copy supporting transports. Date: Sun, 20 Feb 2011 00:41:20 +0530 Message-ID: <87y65b261z.fsf@linux.vnet.ibm.com> References: <1297980761-28579-1-git-send-email-jvrao@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, "Venkateswararao Jujjuri \(JV\)" To: "Venkateswararao Jujjuri \(JV\)" , v9fs-developer@lists.sourceforge.net Return-path: Received: from e23smtp07.au.ibm.com ([202.81.31.140]:51478 "EHLO e23smtp07.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755119Ab1BSTLb (ORCPT ); Sat, 19 Feb 2011 14:11:31 -0500 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp07.au.ibm.com (8.14.4/8.13.1) with ESMTP id p1JJBT4i024759 for ; Sun, 20 Feb 2011 06:11:29 +1100 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p1JJBTXx2474172 for ; Sun, 20 Feb 2011 06:11:29 +1100 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p1JJBSOS003534 for ; Sun, 20 Feb 2011 06:11:29 +1100 In-Reply-To: <1297980761-28579-1-git-send-email-jvrao@linux.vnet.ibm.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Thu, 17 Feb 2011 14:12:41 -0800, "Venkateswararao Jujjuri (JV)" wrote: > If a transport prefers payload to be sent separate from the PDU > (P9_TRANS_PREF_PAYLOAD_SEP), there is no need to allocate msize > PDU buffers(struct p9_fcall). > > This patch allocates only upto 4k buffers for this kind of transports > and there won't be any change to the legacy transports. > > Hence, this patch on top of zero copy changes allows user to > specify higher msizes through the mount option > without hogging the kernel heap. > > Signed-off-by: Venkateswararao Jujjuri > --- > include/net/9p/9p.h | 2 +- > net/9p/client.c | 23 +++++++++++++++++------ > 2 files changed, 18 insertions(+), 7 deletions(-) > > diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h > index 7aefa6d..eaa45f9 100644 > --- a/include/net/9p/9p.h > +++ b/include/net/9p/9p.h > @@ -688,7 +688,7 @@ struct p9_rwstat { > * @id: protocol operating identifier of type &p9_msg_t > * @tag: transaction id of the request > * @offset: used by marshalling routines to track currentposition in buffer > - * @capacity: used by marshalling routines to track total capacity > + * @capacity: used by marshalling routines to track total malloc'd capacity > * @pubuf: Payload user buffer given by the caller > * @pubuf: Payload kernel buffer given by the caller > * @pbuf_size: pubuf/pkbuf(only one will be !NULL) size to be read/write. > diff --git a/net/9p/client.c b/net/9p/client.c > index 251abb1..43ec78a 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -229,10 +229,23 @@ static struct p9_req_t *p9_tag_alloc(struct p9_client *c, u16 tag) > return ERR_PTR(-ENOMEM); > } > init_waitqueue_head(req->wq); > - req->tc = kmalloc(sizeof(struct p9_fcall)+c->msize, > - GFP_KERNEL); > - req->rc = kmalloc(sizeof(struct p9_fcall)+c->msize, > - GFP_KERNEL); > + if ((c->trans_mod->pref & P9_TRANS_PREF_PAYLOAD_MASK) == > + P9_TRANS_PREF_PAYLOAD_SEP) { > + int alloc_msize = min(c->msize, 4096); value 4096 should be a #define with a comment explaining how we arrived at value 4096 > + req->tc = kmalloc(sizeof(struct p9_fcall)+alloc_msize, > + GFP_KERNEL); > + req->tc->capacity = alloc_msize; > + req->rc = kmalloc(sizeof(struct p9_fcall)+alloc_msize, > + GFP_KERNEL); > + req->rc->capacity = alloc_msize; > + } else { > + req->tc = kmalloc(sizeof(struct p9_fcall)+c->msize, > + GFP_KERNEL); > + req->tc->capacity = c->msize; > + req->rc = kmalloc(sizeof(struct p9_fcall)+c->msize, > + GFP_KERNEL); > + req->rc->capacity = c->msize; > + } > if ((!req->tc) || (!req->rc)) { > printk(KERN_ERR "Couldn't grow tag array\n"); > kfree(req->tc); > @@ -243,9 +256,7 @@ static struct p9_req_t *p9_tag_alloc(struct p9_client *c, u16 tag) > return ERR_PTR(-ENOMEM); > } > req->tc->sdata = (char *) req->tc + sizeof(struct p9_fcall); > - req->tc->capacity = c->msize; > req->rc->sdata = (char *) req->rc + sizeof(struct p9_fcall); > - req->rc->capacity = c->msize; > } > > p9pdu_reset(req->tc); -aneesh