From patchwork Tue Feb 8 18:26:17 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aneesh Kumar K.V" X-Patchwork-Id: 541271 X-Patchwork-Delegate: ericvh@gmail.com Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p18IQqoS011052 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 8 Feb 2011 18:27:15 GMT Received: from localhost ([127.0.0.1] helo=sfs-ml-3.v29.ch3.sourceforge.com) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.74) (envelope-from ) id 1PmsGl-0001qF-Ph; Tue, 08 Feb 2011 18:26:31 +0000 Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.74) (envelope-from ) id 1PmsGl-0001qA-CI for v9fs-developer@lists.sourceforge.net; Tue, 08 Feb 2011 18:26:31 +0000 X-ACL-Warn: Received: from e28smtp01.in.ibm.com ([122.248.162.1]) by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.74) id 1PmsGj-0001FZ-VT for v9fs-developer@lists.sourceforge.net; Tue, 08 Feb 2011 18:26:31 +0000 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by e28smtp01.in.ibm.com (8.14.4/8.13.1) with ESMTP id p18IQJPm015611 for ; Tue, 8 Feb 2011 23:56:19 +0530 Received: from d28av02.in.ibm.com (d28av02.in.ibm.com [9.184.220.64]) by d28relay01.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p18IQJYU4415514 for ; Tue, 8 Feb 2011 23:56:19 +0530 Received: from d28av02.in.ibm.com (loopback [127.0.0.1]) by d28av02.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p18IQJqn010343 for ; Wed, 9 Feb 2011 05:26:19 +1100 Received: from skywalker.linux.vnet.ibm.com ([9.77.124.26]) by d28av02.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p18IQIdR010318; Wed, 9 Feb 2011 05:26:18 +1100 From: "Aneesh Kumar K. V" To: "Venkateswararao Jujjuri \(JV\)" In-Reply-To: <87d3n2qufz.fsf@linux.vnet.ibm.com> References: <1297146866-17187-1-git-send-email-jvrao@linux.vnet.ibm.com> <1297146866-17187-4-git-send-email-jvrao@linux.vnet.ibm.com> <877hdbhvw7.fsf@linux.vnet.ibm.com> <4D50E747.3030006@linux.vnet.ibm.com> <8739nyj4rt.fsf@linux.vnet.ibm.com> <4D517B53.30608@linux.vnet.ibm.com> <87d3n2qufz.fsf@linux.vnet.ibm.com> User-Agent: Notmuch/0.5-64-gc3ae51d (http://notmuchmail.org) Emacs/23.1.1 (i486-pc-linux-gnu) Date: Tue, 08 Feb 2011 23:56:17 +0530 Message-ID: <87aai6qt6e.fsf@linux.vnet.ibm.com> MIME-Version: 1.0 X-Spam-Score: -0.0 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay domain X-Headers-End: 1PmsGj-0001FZ-VT Cc: V9FS Developers Subject: Re: [V9fs-developer] [PATCH 4/7] [net/9p] Add gup/zero_copy support to VirtIO transport layer. X-BeenThere: v9fs-developer@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: v9fs-developer-bounces@lists.sourceforge.net X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Tue, 08 Feb 2011 18:27:15 +0000 (UTC) diff --git a/net/9p/client.c b/net/9p/client.c index a05673b..7d027e6 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -93,7 +93,10 @@ static int get_protocol_version(const substring_t *name) } static struct p9_req_t * -p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...); +do_p9_client_rpc(struct p9_client *c, int8_t type, int zc, const char *fmt, ...); + +#define p9_client_rpc(client, type, fmt...) do_p9_client_rpc(client, type, 0, ##fmt) +#define p9_client_zcrpc(client, type, fmt..) do_p9_client_rpc(client, type, 1, ##fmt) /** * parse_options - parse mount options into client structure @@ -583,7 +586,14 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) goto reterr; p9pdu_finalize(req->tc); - err = c->trans_mod->request(c, req); + if (zc) { + err = c->trans_mode->zc_request(c, req); + if (err == EAGAIN) { + err = c->trans_mode->request(c, req); + } + + } else + err = c->trans_mod->request(c, req); if (err < 0) { if (err != -ERESTARTSYS) c->status = Disconnected; @@ -1348,7 +1358,8 @@ p9_client_write(struct p9_fid *fid, char *data, const char __user *udata, req = p9_client_rpc(clnt, P9_TWRITE, "dqD", fid->fid, offset, rsize, data); else - req = p9_client_rpc(clnt, P9_TWRITE, "dqU", fid->fid, offset, + /* Try a zero copy rpc for user write */ + req = p9_client_zcrpc(clnt, P9_TWRITE, "dqU", fid->fid, offset, rsize, udata); if (IS_ERR(req)) { err = PTR_ERR(req); diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 078eb16..91b5a47 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -1012,6 +1012,7 @@ static struct p9_trans_module p9_tcp_trans = { .create = p9_fd_create_tcp, .close = p9_fd_close, .request = p9_fd_request, + .zc_request = p9_no_zero_copy_request, .cancel = p9_fd_cancel, .owner = THIS_MODULE, }; diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index c8f3f72..576da62 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c @@ -446,6 +446,7 @@ static struct p9_trans_module p9_virtio_trans = { .create = p9_virtio_create, .close = p9_virtio_close, .request = p9_virtio_request, + .zc_request = p9_virtio_zero_copy_request, .cancel = p9_virtio_cancel, .maxsize = PAGE_SIZE*16, .def = 0,