提交 4f7ebe80 编写于 作者: A Arun R Bharadwaj 提交者: Eric Van Hensbergen

net/9p: This patch implements TLERROR/RLERROR on the 9P client.

Signed-off-by: NArun R Bharadwaj <arun@linux.vnet.ibm.com>
Signed-off-by: NVenkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Signed-off-by: NEric Van Hensbergen <ericvh@gmail.com>
上级 7c7298cf
...@@ -86,6 +86,8 @@ do { \ ...@@ -86,6 +86,8 @@ do { \
/** /**
* enum p9_msg_t - 9P message types * enum p9_msg_t - 9P message types
* @P9_TLERROR: not used
* @P9_RLERROR: response for any failed request for 9P2000.L
* @P9_TSTATFS: file system status request * @P9_TSTATFS: file system status request
* @P9_RSTATFS: file system status response * @P9_RSTATFS: file system status response
* @P9_TSYMLINK: make symlink request * @P9_TSYMLINK: make symlink request
...@@ -137,6 +139,8 @@ do { \ ...@@ -137,6 +139,8 @@ do { \
*/ */
enum p9_msg_t { enum p9_msg_t {
P9_TLERROR = 6,
P9_RLERROR,
P9_TSTATFS = 8, P9_TSTATFS = 8,
P9_RSTATFS, P9_RSTATFS,
P9_TLOPEN = 12, P9_TLOPEN = 12,
......
...@@ -450,32 +450,43 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req) ...@@ -450,32 +450,43 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
return err; return err;
} }
if (type == P9_RERROR) { if (type == P9_RERROR || type == P9_RLERROR) {
int ecode; int ecode;
char *ename;
err = p9pdu_readf(req->rc, c->proto_version, "s?d", if (!p9_is_proto_dotl(c)) {
&ename, &ecode); char *ename;
if (err) {
P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n",
err);
return err;
}
if (p9_is_proto_dotu(c) || err = p9pdu_readf(req->rc, c->proto_version, "s?d",
p9_is_proto_dotl(c)) &ename, &ecode);
err = -ecode; if (err)
goto out_err;
if (!err || !IS_ERR_VALUE(err)) if (p9_is_proto_dotu(c))
err = p9_errstr2errno(ename, strlen(ename)); err = -ecode;
P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename); if (!err || !IS_ERR_VALUE(err)) {
err = p9_errstr2errno(ename, strlen(ename));
P9_DPRINTK(P9_DEBUG_9P, "<<< RERROR (%d) %s\n", -ecode, ename);
kfree(ename);
}
} else {
err = p9pdu_readf(req->rc, c->proto_version, "d", &ecode);
err = -ecode;
P9_DPRINTK(P9_DEBUG_9P, "<<< RLERROR (%d)\n", -ecode);
}
kfree(ename);
} else } else
err = 0; err = 0;
return err; return err;
out_err:
P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n", err);
return err;
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册