diff options
| author | Arun R Bharadwaj <arun@linux.vnet.ibm.com> | 2010-07-28 04:47:26 -0400 |
|---|---|---|
| committer | Eric Van Hensbergen <ericvh@gmail.com> | 2010-10-28 10:08:45 -0400 |
| commit | 4f7ebe807242898ee08ed732d56982874442c304 (patch) | |
| tree | 25d8cec6b3a487fb9b44b3af20179a6f7b5db36d /net | |
| parent | 7c7298cffc8f4417c95117c2a432f962c066499d (diff) | |
net/9p: This patch implements TLERROR/RLERROR on the 9P client.
Signed-off-by: Arun R Bharadwaj <arun@linux.vnet.ibm.com>
Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Diffstat (limited to 'net')
| -rw-r--r-- | net/9p/client.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index 83bf0541d66f..c155cc45eff9 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
| @@ -450,32 +450,43 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req) | |||
| 450 | return err; | 450 | return err; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | if (type == P9_RERROR) { | 453 | if (type == P9_RERROR || type == P9_RLERROR) { |
| 454 | int ecode; | 454 | int ecode; |
| 455 | char *ename; | ||
| 456 | 455 | ||
| 457 | err = p9pdu_readf(req->rc, c->proto_version, "s?d", | 456 | if (!p9_is_proto_dotl(c)) { |
| 458 | &ename, &ecode); | 457 | char *ename; |
| 459 | if (err) { | ||
| 460 | P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n", | ||
| 461 | err); | ||
| 462 | return err; | ||
| 463 | } | ||
| 464 | 458 | ||
| 465 | if (p9_is_proto_dotu(c) || | 459 | err = p9pdu_readf(req->rc, c->proto_version, "s?d", |
| 466 | p9_is_proto_dotl(c)) | 460 | &ename, &ecode); |
| 467 | err = -ecode; | 461 | if (err) |
| 462 | goto out_err; | ||
| 468 | 463 | ||
| 469 | if (!err || !IS_ERR_VALUE(err)) | 464 | if (p9_is_proto_dotu(c)) |
| 470 | err = p9_errstr2errno(ename, strlen(ename)); | 465 | err = -ecode; |
| 471 | 466 | ||
| 472 | P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename); | 467 | if (!err || !IS_ERR_VALUE(err)) { |
| 468 | err = p9_errstr2errno(ename, strlen(ename)); | ||
| 469 | |||
| 470 | P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename); | ||
| 471 | |||
| 472 | kfree(ename); | ||
| 473 | } | ||
| 474 | } else { | ||
| 475 | err = p9pdu_readf(req->rc, c->proto_version, "d", &ecode); | ||
| 476 | err = -ecode; | ||
| 477 | |||
| 478 | P9_DPRINTK(P9_DEBUG_9P, "<<< RLERROR (%d)\n", -ecode); | ||
| 479 | } | ||
| 473 | 480 | ||
| 474 | kfree(ename); | ||
| 475 | } else | 481 | } else |
| 476 | err = 0; | 482 | err = 0; |
| 477 | 483 | ||
| 478 | return err; | 484 | return err; |
| 485 | |||
| 486 | out_err: | ||
| 487 | P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n", err); | ||
| 488 | |||
| 489 | return err; | ||
| 479 | } | 490 | } |
| 480 | 491 | ||
| 481 | /** | 492 | /** |
