Message ID | 1302856173-10566-1-git-send-email-mohan@in.ibm.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
On 04/15/2011 01:29 AM, M. Mohan Kumar wrote: > Use proper data type to handle get_user_pages_fast error condition. Also > do not treat EFAULT error as fatal. > > Signed-off-by: M. Mohan Kumar<mohan@in.ibm.com> > --- > net/9p/client.c | 2 +- > net/9p/trans_common.c | 11 +++-------- > 2 files changed, 4 insertions(+), 9 deletions(-) > > diff --git a/net/9p/client.c b/net/9p/client.c > index 691a04a..1612142 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -614,7 +614,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) > > err = c->trans_mod->request(c, req); > if (err< 0) { > - if (err != -ERESTARTSYS) > + if (err != -ERESTARTSYS&& err != -EFAULT) Please analyze other errors that could be returned by c->trans_mod->request() if they need any handling here. > c->status = Disconnected; > goto reterr; > } > diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c > index 14265e8..f020da9 100644 > --- a/net/9p/trans_common.c > +++ b/net/9p/trans_common.c > @@ -63,7 +63,7 @@ p9_payload_gup(struct p9_req_t *req, size_t *pdata_off, int *pdata_len, > int nr_pages, u8 rw) > { > uint32_t first_page_bytes = 0; > - uint32_t pdata_mapped_pages; > + int32_t pdata_mapped_pages; > struct trans_rpage_info *rpinfo; > > *pdata_off = (__force size_t)req->tc->pubuf& (PAGE_SIZE-1); > @@ -75,14 +75,9 @@ p9_payload_gup(struct p9_req_t *req, size_t *pdata_off, int *pdata_len, > rpinfo = req->tc->private; > pdata_mapped_pages = get_user_pages_fast((unsigned long)req->tc->pubuf, > nr_pages, rw,&rpinfo->rp_data[0]); > + if (pdata_mapped_pages<= 0) > + return pdata_mapped_pages; > > - if (pdata_mapped_pages< 0) { > - printk(KERN_ERR "get_user_pages_fast failed:%d udata:%p" > - "nr_pages:%d\n", pdata_mapped_pages, > - req->tc->pubuf, nr_pages); > - pdata_mapped_pages = 0; > - return -EIO; > - } I would keep the printk and return the pdata_mapped_pages inside the if condition. Thanks, JV > rpinfo->rp_nr_pages = pdata_mapped_pages; > if (*pdata_off) { > *pdata_len = first_page_bytes; ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
diff --git a/net/9p/client.c b/net/9p/client.c index 691a04a..1612142 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -614,7 +614,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) err = c->trans_mod->request(c, req); if (err < 0) { - if (err != -ERESTARTSYS) + if (err != -ERESTARTSYS && err != -EFAULT) c->status = Disconnected; goto reterr; } diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c index 14265e8..f020da9 100644 --- a/net/9p/trans_common.c +++ b/net/9p/trans_common.c @@ -63,7 +63,7 @@ p9_payload_gup(struct p9_req_t *req, size_t *pdata_off, int *pdata_len, int nr_pages, u8 rw) { uint32_t first_page_bytes = 0; - uint32_t pdata_mapped_pages; + int32_t pdata_mapped_pages; struct trans_rpage_info *rpinfo; *pdata_off = (__force size_t)req->tc->pubuf & (PAGE_SIZE-1); @@ -75,14 +75,9 @@ p9_payload_gup(struct p9_req_t *req, size_t *pdata_off, int *pdata_len, rpinfo = req->tc->private; pdata_mapped_pages = get_user_pages_fast((unsigned long)req->tc->pubuf, nr_pages, rw, &rpinfo->rp_data[0]); + if (pdata_mapped_pages <= 0) + return pdata_mapped_pages; - if (pdata_mapped_pages < 0) { - printk(KERN_ERR "get_user_pages_fast failed:%d udata:%p" - "nr_pages:%d\n", pdata_mapped_pages, - req->tc->pubuf, nr_pages); - pdata_mapped_pages = 0; - return -EIO; - } rpinfo->rp_nr_pages = pdata_mapped_pages; if (*pdata_off) { *pdata_len = first_page_bytes;
Use proper data type to handle get_user_pages_fast error condition. Also do not treat EFAULT error as fatal. Signed-off-by: M. Mohan Kumar <mohan@in.ibm.com> --- net/9p/client.c | 2 +- net/9p/trans_common.c | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-)