On Thu, 10 Feb 2011 17:25:11 -0800, "Venkateswararao Jujjuri (JV)" <jvrao@xxxxxxxxxxxxxxxxxx> wrote: > In addition, this patch also avoids zero copy for short reads in !dotl case. > > Signed-off-by: Venkateswararao Jujjuri <jvrao@xxxxxxxxxxxxxxxxxx> > --- > net/9p/client.c | 64 +++++++++++++++++++++++++++++++++++------------------- > 1 files changed, 41 insertions(+), 23 deletions(-) > > diff --git a/net/9p/client.c b/net/9p/client.c > index f6d8531..3e51273 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->pubuf) { > + /* User Buffer */ > + err = copy_from_user( > + &req->rc->sdata[req->rc->offset], > + req->tc->pubuf, len); > + if (err) { > + err = -EFAULT; > + return err; > + } Will this handle error resulting from kernel_read ?. I guess we have a kernel address there. > + } else { > + /* Kernel Buffer */ > + memmove(&req->rc->sdata[req->rc->offset], > + req->tc->pkbuf, len); > + } > + } -aneesh -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html