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@xxxxxxxxxx> --- Changes from previous version: Retain printing error message in case get_user_pages_fast fails net/9p/client.c | 2 +- net/9p/trans_common.c | 8 +++----- 2 files changed, 4 insertions(+), 6 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) c->status = Disconnected; goto reterr; } diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c index 14265e8..0e73e07 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,13 +75,11 @@ 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) { + 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; + return pdata_mapped_pages ; } rpinfo->rp_nr_pages = pdata_mapped_pages; if (*pdata_off) { -- 1.7.4 -- 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