X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=net%2F9p%2Fclient.c;h=3e61ba193bd9cc56deff2dcc511e4f8c6893e49c;hp=854ca7a911c427f753ebe2b5d93a71a1c10df041;hb=78124e9bcc8c39afbcda2f0500b868dd0b159d40;hpb=b32fc0a0629bf5894b35f33554c118aacfd0d1e2 diff --git a/net/9p/client.c b/net/9p/client.c index 854ca7a911c4..3e61ba193bd9 100644 --- a/net/9p/client.c +++ b/net/9p/client.c @@ -740,8 +740,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) goto reterr; } /* Wait for the response */ - err = wait_event_interruptible(*req->wq, - req->status >= REQ_STATUS_RCVD); + err = wait_event_killable(*req->wq, req->status >= REQ_STATUS_RCVD); if (req->status == REQ_STATUS_ERROR) { P9_DPRINTK(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); @@ -824,7 +823,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, if (err < 0) { if (err == -EIO) c->status = Disconnected; - goto reterr; + if (err != -ERESTARTSYS) + goto reterr; } if (req->status == REQ_STATUS_ERROR) { P9_DPRINTK(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err); @@ -2055,6 +2055,10 @@ int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset) trace_9p_protocol_dump(clnt, req->rc); goto free_and_error; } + if (rsize < count) { + pr_err("bogus RREADDIR count (%d > %d)\n", count, rsize); + count = rsize; + } P9_DPRINTK(P9_DEBUG_9P, "<<< RREADDIR count %d\n", count);