Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f7ebe80 authored by Arun R Bharadwaj's avatar Arun R Bharadwaj Committed by Eric Van Hensbergen
Browse files

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

parent 7c7298cf
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -86,6 +86,8 @@ do { \

/**
 * 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_RSTATFS: file system status response
 * @P9_TSYMLINK: make symlink request
@@ -137,6 +139,8 @@ do { \
 */

enum p9_msg_t {
	P9_TLERROR = 6,
	P9_RLERROR,
	P9_TSTATFS = 8,
	P9_RSTATFS,
	P9_TLOPEN = 12,
+27 −16
Original line number Diff line number Diff line
@@ -450,32 +450,43 @@ static int p9_check_errors(struct p9_client *c, struct p9_req_t *req)
		return err;
	}

	if (type == P9_RERROR) {
	if (type == P9_RERROR || type == P9_RLERROR) {
		int ecode;

		if (!p9_is_proto_dotl(c)) {
			char *ename;

			err = p9pdu_readf(req->rc, c->proto_version, "s?d",
								&ename, &ecode);
		if (err) {
			P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n",
									err);
			return err;
		}
			if (err)
				goto out_err;

		if (p9_is_proto_dotu(c) ||
			p9_is_proto_dotl(c))
			if (p9_is_proto_dotu(c))
				err = -ecode;

		if (!err || !IS_ERR_VALUE(err))
			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);
		}

	} else
		err = 0;

	return err;

out_err:
	P9_DPRINTK(P9_DEBUG_ERROR, "couldn't parse error%d\n", err);

	return err;
}

/**