All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
To: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
Cc: v9fs-developer@lists.sourceforge.net, linux-fsdevel@vger.kernel.org
Subject: [PATCH 7/7] [net/9p] Handle TREAD/RERROR case in !dotl case.
Date: Sun, 06 Feb 2011 22:58:12 -0800	[thread overview]
Message-ID: <4D4F9804.1050904@linux.vnet.ibm.com> (raw)
In-Reply-To: <1297063283-2180-8-git-send-email-jvrao@linux.vnet.ibm.com>

On 2/6/2011 11:21 PM, Venkateswararao Jujjuri (JV) wrote:
> In addition, this patch also avoids zero copy for short reads in !dotl case.
> 
> Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
> 
> Conflicts:
> 
> 	net/9p/protocol.c
> ---
>  include/net/9p/9p.h |    2 +
>  net/9p/client.c     |   74 +++++++++++++++++++++++++++++++++-----------------
>  2 files changed, 51 insertions(+), 25 deletions(-)
> 
> diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h
> index 9c939c2..7313801 100644
> --- a/include/net/9p/9p.h
> +++ b/include/net/9p/9p.h
> @@ -320,6 +320,8 @@ enum p9_qid_t {
>  /* Room for readdir header */
>  #define P9_READDIRHDRSZ	24
> 
> +#define P9_ERRMAX 256 /* FIXME: Check what is the correct value */
> +
>  /**
>   * struct p9_str - length prefixed string type
>   * @len: length of the string
> diff --git a/net/9p/client.c b/net/9p/client.c
> index f939edf..7f34c42 100644
> --- a/net/9p/client.c
> +++ b/net/9p/client.c
> @@ -443,6 +443,7 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
>  {
>  	int8_t type;
>  	int err;
> +	int ecode;
> 
>  	err = p9_parse_header(req->rc, NULL, &type, NULL, 0);
>  	if (err) {
> @@ -450,36 +451,53 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
>  		return err;
>  	}
> 
> -	if (type == P9_RERROR || type == P9_RLERROR) {
> -		int ecode;
> -
> -		if (!p9_is_proto_dotl(c)) {
> -			char *ename;
> +	if (type != P9_RERROR && type != P9_RLERROR) 
> +		return 0;
> 
> -			err = p9pdu_readf(req->rc, c->proto_version, "s?d",
> -								&ename, &ecode);
> -			if (err)
> -				goto out_err;
> +	if (!p9_is_proto_dotl(c)) {
> +		char *ename;
> +
> +		if (req->tc->pbuf_size) {
> +			/* Handle user buffers */
> +			size_t len = req->rc->size - req->rc->offset;
> +			if (req->tc->pbuf &&
> +					!segment_eq(get_fs(), KERNEL_DS)) {
> +				/* User Buffer */
> +				err = copy_from_user(
> +					&req->rc->sdata[req->rc->offset],
> +					req->tc->pbuf, len);
> +				if (err) {
> +					err = -EFAULT;
> +					return err;
> +				}
> +			} else {
> +				/* Kernel Buffer */
> +				memmove(&req->rc->sdata[req->rc->offset],
> +						req->tc->pbuf, len);
> +			}
> +		}
> +		err = p9pdu_readf(req->rc, c->proto_version, "s?d",
> +				&ename, &ecode);
> +		if (err)
> +			goto out_err;
> 
> -			if (p9_is_proto_dotu(c))
> -				err = -ecode;
> +		if (p9_is_proto_dotu(c))
> +			err = -ecode;
> 
> -			if (!err || !IS_ERR_VALUE(err)) {
> -				err = p9_errstr2errno(ename, strlen(ename));
> +		if (!err || !IS_ERR_VALUE(err)) {
> +			err = p9_errstr2errno(ename, strlen(ename));
> 
> -				P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename);
> +			P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename);
> 
> -				kfree(ename);
> -			}
> -		} else {
> -			err = p9pdu_readf(req->rc, c->proto_version, "d", &ecode);
> -			err = -ecode;
> -
> -			P9_DPRINTK(P9_DEBUG_9P, "<<< RLERROR (%d)\n", -ecode);
> +			kfree(ename);
>  		}
> +	} else {
> +		err = p9pdu_readf(req->rc, c->proto_version, "d", &ecode);
> +		err = -ecode;
> +
> +		P9_DPRINTK(P9_DEBUG_9P, "<<< RLERROR (%d)\n", -ecode);
> +	}
> 
> -	} else
> -		err = 0;
> 
>  	return err;
> 
> @@ -1270,8 +1288,14 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset,
>  	if (count < rsize)
>  		rsize = count;
> 
> -	if ((clnt->trans_mod->pref & P9_TRANS_PREF_PAYLOAD_MASK) ==
> -			P9_TRANS_PREF_PAYLOAD_SEP) {
> +	/* for !p9_proto_2000L, we need to have enough space on PDU
> +	 * to handle TREAD/RERROR. Hence don't attempt payload
> +	 * seperaion for small reads even if the transport prefers
> +	 * P9_TRANS_PREF_PAYLOAD_SEP */
> +	if (((clnt->trans_mod->pref & P9_TRANS_PREF_PAYLOAD_MASK) ==
> +			P9_TRANS_PREF_PAYLOAD_SEP) &&
> +			((clnt->proto_version == p9_proto_2000L) ||
> +			 rsize > 2 * P9_ERRMAX) ) {
>  		req = p9_client_rpc(clnt, P9_TREAD, "dqE", fid->fid, offset,
>  				rsize, data ? data : udata);
>  	} else {



  reply	other threads:[~2011-02-07  6:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-07  7:21 [RFC-V2] [PATCH 0/7] Zero Copy Venkateswararao Jujjuri (JV)
2011-02-07  6:55 ` Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate zero copy Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` Venkateswararao Jujjuri (JV)
2011-02-07  6:56   ` [RFC] [PATCH 2/7] [net/9p] Adds supporting functions for " Venkateswararao Jujjuri (JV)
2011-02-08 15:20     ` [V9fs-developer] " Latchesar Ionkov
2011-02-08 17:21       ` Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate " Venkateswararao Jujjuri (JV)
2011-02-07  6:56   ` [RFC] [PATCH 3/7] [net/9p] Assign type of transaction to tc->pdu->id which is otherwise unsed Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate zero copy Venkateswararao Jujjuri (JV)
2011-02-07  6:56   ` [RFC] [PATCH 4/7] [net/9p] Add gup/zero_copy support to VirtIO transport layer Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate zero copy Venkateswararao Jujjuri (JV)
2011-02-07  6:57   ` [RFC] [PATCH 5/7] [net/9p] Add preferences to transport layer Venkateswararao Jujjuri (JV)
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate zero copy Venkateswararao Jujjuri (JV)
2011-02-07  6:57   ` :[RFC] [PATCH 6/7] [net/9p] Read and Write side zerocopy changes for 9P2000.L protocol Venkateswararao Jujjuri (JV)
2011-02-08 21:09     ` [V9fs-developer] " Eric Van Hensbergen
2011-02-08 21:16       ` Eric Van Hensbergen
2011-02-09 21:09         ` Venkateswararao Jujjuri (JV)
2011-02-09 21:12           ` Venkateswararao Jujjuri (JV)
2011-02-09 21:18           ` Eric Van Hensbergen
2011-02-09 21:39             ` Venkateswararao Jujjuri (JV)
2011-02-08 23:50       ` Venkateswararao Jujjuri (JV)
2011-02-09  1:59         ` Venkateswararao Jujjuri (JV)
2011-02-09 14:28           ` Eric Van Hensbergen
2011-02-07  7:21 ` [RFC] [PATCH 1/7] [net/9p] Additional elements to p9_fcall to accomodate zero copy Venkateswararao Jujjuri (JV)
2011-02-07  6:58   ` Venkateswararao Jujjuri (JV) [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-02-14  2:21 [net/9p] ZeroCopy patch series Venkateswararao Jujjuri (JV)
2011-02-14  2:21 ` [PATCH 7/7] [net/9p] Handle TREAD/RERROR case in !dotl case Venkateswararao Jujjuri (JV)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D4F9804.1050904@linux.vnet.ibm.com \
    --to=jvrao@linux.vnet.ibm.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=v9fs-developer@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.