diff options
| -rw-r--r-- | include/net/9p/9p.h | 4 | ||||
| -rw-r--r-- | net/9p/client.c | 76 | ||||
| -rw-r--r-- | net/9p/protocol.c | 21 |
3 files changed, 72 insertions, 29 deletions
diff --git a/include/net/9p/9p.h b/include/net/9p/9p.h index cb5bc731e885..d2c60c73619d 100644 --- a/include/net/9p/9p.h +++ b/include/net/9p/9p.h | |||
| @@ -27,8 +27,6 @@ | |||
| 27 | #ifndef NET_9P_H | 27 | #ifndef NET_9P_H |
| 28 | #define NET_9P_H | 28 | #define NET_9P_H |
| 29 | 29 | ||
| 30 | #ifdef CONFIG_NET_9P_DEBUG | ||
| 31 | |||
| 32 | /** | 30 | /** |
| 33 | * enum p9_debug_flags - bits for mount time debug parameter | 31 | * enum p9_debug_flags - bits for mount time debug parameter |
| 34 | * @P9_DEBUG_ERROR: more verbose error messages including original error string | 32 | * @P9_DEBUG_ERROR: more verbose error messages including original error string |
| @@ -55,10 +53,12 @@ enum p9_debug_flags { | |||
| 55 | P9_DEBUG_SLABS = (1<<7), | 53 | P9_DEBUG_SLABS = (1<<7), |
| 56 | P9_DEBUG_FCALL = (1<<8), | 54 | P9_DEBUG_FCALL = (1<<8), |
| 57 | P9_DEBUG_FID = (1<<9), | 55 | P9_DEBUG_FID = (1<<9), |
| 56 | P9_DEBUG_PKT = (1<<10), | ||
| 58 | }; | 57 | }; |
| 59 | 58 | ||
| 60 | extern unsigned int p9_debug_level; | 59 | extern unsigned int p9_debug_level; |
| 61 | 60 | ||
| 61 | #ifdef CONFIG_NET_9P_DEBUG | ||
| 62 | #define P9_DPRINTK(level, format, arg...) \ | 62 | #define P9_DPRINTK(level, format, arg...) \ |
| 63 | do { \ | 63 | do { \ |
| 64 | if ((p9_debug_level & level) == level) {\ | 64 | if ((p9_debug_level & level) == level) {\ |
diff --git a/net/9p/client.c b/net/9p/client.c index 2a166bfb95a3..bbac2f72b4d2 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
| @@ -389,8 +389,8 @@ p9_parse_header(struct p9_fcall *pdu, int32_t *size, int8_t *type, int16_t *tag, | |||
| 389 | pdu->id = r_type; | 389 | pdu->id = r_type; |
| 390 | pdu->tag = r_tag; | 390 | pdu->tag = r_tag; |
| 391 | 391 | ||
| 392 | P9_DPRINTK(P9_DEBUG_MUX, "pdu: type: %d tag: %d size=%d offset=%d\n", | 392 | P9_DPRINTK(P9_DEBUG_9P, "<<< size=%d type: %d tag: %d\n", pdu->size, |
| 393 | pdu->id, pdu->tag, pdu->size, pdu->offset); | 393 | pdu->id, pdu->tag); |
| 394 | 394 | ||
| 395 | if (type) | 395 | if (type) |
| 396 | *type = r_type; | 396 | *type = r_type; |
| @@ -672,6 +672,7 @@ int p9_client_version(struct p9_client *c) | |||
| 672 | err = p9pdu_readf(req->rc, c->dotu, "ds", &msize, &version); | 672 | err = p9pdu_readf(req->rc, c->dotu, "ds", &msize, &version); |
| 673 | if (err) { | 673 | if (err) { |
| 674 | P9_DPRINTK(P9_DEBUG_9P, "version error %d\n", err); | 674 | P9_DPRINTK(P9_DEBUG_9P, "version error %d\n", err); |
| 675 | p9pdu_dump(1, req->rc); | ||
| 675 | goto error; | 676 | goto error; |
| 676 | } | 677 | } |
| 677 | 678 | ||
| @@ -810,6 +811,7 @@ struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid, | |||
| 810 | 811 | ||
| 811 | err = p9pdu_readf(req->rc, clnt->dotu, "Q", &qid); | 812 | err = p9pdu_readf(req->rc, clnt->dotu, "Q", &qid); |
| 812 | if (err) { | 813 | if (err) { |
| 814 | p9pdu_dump(1, req->rc); | ||
| 813 | p9_free_req(clnt, req); | 815 | p9_free_req(clnt, req); |
| 814 | goto error; | 816 | goto error; |
| 815 | } | 817 | } |
| @@ -856,6 +858,7 @@ p9_client_auth(struct p9_client *clnt, char *uname, u32 n_uname, char *aname) | |||
| 856 | 858 | ||
| 857 | err = p9pdu_readf(req->rc, clnt->dotu, "Q", &qid); | 859 | err = p9pdu_readf(req->rc, clnt->dotu, "Q", &qid); |
| 858 | if (err) { | 860 | if (err) { |
| 861 | p9pdu_dump(1, req->rc); | ||
| 859 | p9_free_req(clnt, req); | 862 | p9_free_req(clnt, req); |
| 860 | goto error; | 863 | goto error; |
| 861 | } | 864 | } |
| @@ -910,9 +913,12 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, int nwname, char **wnames, | |||
| 910 | } | 913 | } |
| 911 | 914 | ||
| 912 | err = p9pdu_readf(req->rc, clnt->dotu, "R", &nwqids, &wqids); | 915 | err = p9pdu_readf(req->rc, clnt->dotu, "R", &nwqids, &wqids); |
| 913 | p9_free_req(clnt, req); | 916 | if (err) { |
| 914 | if (err) | 917 | p9pdu_dump(1, req->rc); |
| 918 | p9_free_req(clnt, req); | ||
| 915 | goto clunk_fid; | 919 | goto clunk_fid; |
| 920 | } | ||
| 921 | p9_free_req(clnt, req); | ||
| 916 | 922 | ||
| 917 | P9_DPRINTK(P9_DEBUG_9P, "<<< RWALK nwqid %d:\n", nwqids); | 923 | P9_DPRINTK(P9_DEBUG_9P, "<<< RWALK nwqid %d:\n", nwqids); |
| 918 | 924 | ||
| @@ -967,9 +973,10 @@ int p9_client_open(struct p9_fid *fid, int mode) | |||
| 967 | } | 973 | } |
| 968 | 974 | ||
| 969 | err = p9pdu_readf(req->rc, clnt->dotu, "Qd", &qid, &iounit); | 975 | err = p9pdu_readf(req->rc, clnt->dotu, "Qd", &qid, &iounit); |
| 970 | p9_free_req(clnt, req); | 976 | if (err) { |
| 971 | if (err) | 977 | p9pdu_dump(1, req->rc); |
| 972 | goto error; | 978 | goto free_and_error; |
| 979 | } | ||
| 973 | 980 | ||
| 974 | P9_DPRINTK(P9_DEBUG_9P, "<<< ROPEN qid %x.%llx.%x iounit %x\n", | 981 | P9_DPRINTK(P9_DEBUG_9P, "<<< ROPEN qid %x.%llx.%x iounit %x\n", |
| 975 | qid.type, qid.path, qid.version, iounit); | 982 | qid.type, qid.path, qid.version, iounit); |
| @@ -977,6 +984,8 @@ int p9_client_open(struct p9_fid *fid, int mode) | |||
| 977 | fid->mode = mode; | 984 | fid->mode = mode; |
| 978 | fid->iounit = iounit; | 985 | fid->iounit = iounit; |
| 979 | 986 | ||
| 987 | free_and_error: | ||
| 988 | p9_free_req(clnt, req); | ||
| 980 | error: | 989 | error: |
| 981 | return err; | 990 | return err; |
| 982 | } | 991 | } |
| @@ -1007,9 +1016,10 @@ int p9_client_fcreate(struct p9_fid *fid, char *name, u32 perm, int mode, | |||
| 1007 | } | 1016 | } |
| 1008 | 1017 | ||
| 1009 | err = p9pdu_readf(req->rc, clnt->dotu, "Qd", &qid, &iounit); | 1018 | err = p9pdu_readf(req->rc, clnt->dotu, "Qd", &qid, &iounit); |
| 1010 | p9_free_req(clnt, req); | 1019 | if (err) { |
| 1011 | if (err) | 1020 | p9pdu_dump(1, req->rc); |
| 1012 | goto error; | 1021 | goto free_and_error; |
| 1022 | } | ||
| 1013 | 1023 | ||
| 1014 | P9_DPRINTK(P9_DEBUG_9P, "<<< RCREATE qid %x.%llx.%x iounit %x\n", | 1024 | P9_DPRINTK(P9_DEBUG_9P, "<<< RCREATE qid %x.%llx.%x iounit %x\n", |
| 1015 | qid.type, qid.path, qid.version, iounit); | 1025 | qid.type, qid.path, qid.version, iounit); |
| @@ -1017,6 +1027,8 @@ int p9_client_fcreate(struct p9_fid *fid, char *name, u32 perm, int mode, | |||
| 1017 | fid->mode = mode; | 1027 | fid->mode = mode; |
| 1018 | fid->iounit = iounit; | 1028 | fid->iounit = iounit; |
| 1019 | 1029 | ||
| 1030 | free_and_error: | ||
| 1031 | p9_free_req(clnt, req); | ||
| 1020 | error: | 1032 | error: |
| 1021 | return err; | 1033 | return err; |
| 1022 | } | 1034 | } |
| @@ -1103,8 +1115,10 @@ p9_client_read(struct p9_fid *fid, char *data, char __user *udata, u64 offset, | |||
| 1103 | } | 1115 | } |
| 1104 | 1116 | ||
| 1105 | err = p9pdu_readf(req->rc, clnt->dotu, "D", &count, &dataptr); | 1117 | err = p9pdu_readf(req->rc, clnt->dotu, "D", &count, &dataptr); |
| 1106 | if (err) | 1118 | if (err) { |
| 1119 | p9pdu_dump(1, req->rc); | ||
| 1107 | goto free_and_error; | 1120 | goto free_and_error; |
| 1121 | } | ||
| 1108 | 1122 | ||
| 1109 | P9_DPRINTK(P9_DEBUG_9P, "<<< RREAD count %d\n", count); | 1123 | P9_DPRINTK(P9_DEBUG_9P, "<<< RREAD count %d\n", count); |
| 1110 | 1124 | ||
| @@ -1163,8 +1177,11 @@ p9_client_write(struct p9_fid *fid, char *data, const char __user *udata, | |||
| 1163 | } | 1177 | } |
| 1164 | 1178 | ||
| 1165 | err = p9pdu_readf(req->rc, clnt->dotu, "d", &count); | 1179 | err = p9pdu_readf(req->rc, clnt->dotu, "d", &count); |
| 1166 | if (err) | 1180 | if (err) { |
| 1181 | p9pdu_dump(1, req->rc); | ||
| 1167 | goto free_and_error; | 1182 | goto free_and_error; |
| 1183 | } | ||
| 1184 | |||
| 1168 | P9_DPRINTK(P9_DEBUG_9P, "<<< RWRITE count %d\n", count); | 1185 | P9_DPRINTK(P9_DEBUG_9P, "<<< RWRITE count %d\n", count); |
| 1169 | 1186 | ||
| 1170 | p9_free_req(clnt, req); | 1187 | p9_free_req(clnt, req); |
| @@ -1200,20 +1217,27 @@ struct p9_wstat *p9_client_stat(struct p9_fid *fid) | |||
| 1200 | } | 1217 | } |
| 1201 | 1218 | ||
| 1202 | err = p9pdu_readf(req->rc, clnt->dotu, "wS", &ignored, ret); | 1219 | err = p9pdu_readf(req->rc, clnt->dotu, "wS", &ignored, ret); |
| 1203 | p9_free_req(clnt, req); | 1220 | if (err) { |
| 1204 | if (err) | 1221 | ret = ERR_PTR(err); |
| 1205 | goto error; | 1222 | p9pdu_dump(1, req->rc); |
| 1223 | goto free_and_error; | ||
| 1224 | } | ||
| 1206 | 1225 | ||
| 1207 | P9_DPRINTK(P9_DEBUG_9P, | 1226 | P9_DPRINTK(P9_DEBUG_9P, |
| 1208 | "<<< RSTAT sz=%x type=%x dev=%x qid=%2.2x %4.4x %8.8llx" | 1227 | "<<< RSTAT sz=%x type=%x dev=%x qid=%x.%llx.%x\n" |
| 1209 | " mode=%8.8x uid=%d gid=%d size=%lld %s\n", | 1228 | "<<< mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n" |
| 1229 | "<<< name=%s uid=%s gid=%s muid=%s extension=(%s)\n" | ||
| 1230 | "<<< uid=%d gid=%d n_muid=%d\n", | ||
| 1210 | ret->size, ret->type, ret->dev, ret->qid.type, | 1231 | ret->size, ret->type, ret->dev, ret->qid.type, |
| 1211 | ret->qid.version, ret->qid.path, ret->mode, | 1232 | ret->qid.path, ret->qid.version, ret->mode, |
| 1212 | ret->n_uid, ret->n_gid, ret->length, ret->name); | 1233 | ret->atime, ret->mtime, ret->length, ret->name, |
| 1234 | ret->uid, ret->gid, ret->muid, ret->extension, | ||
| 1235 | ret->n_uid, ret->n_gid, ret->n_muid); | ||
| 1213 | 1236 | ||
| 1214 | return ret; | 1237 | free_and_error: |
| 1238 | p9_free_req(clnt, req); | ||
| 1215 | error: | 1239 | error: |
| 1216 | return ERR_PTR(err); | 1240 | return ret; |
| 1217 | } | 1241 | } |
| 1218 | EXPORT_SYMBOL(p9_client_stat); | 1242 | EXPORT_SYMBOL(p9_client_stat); |
| 1219 | 1243 | ||
| @@ -1224,6 +1248,16 @@ int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst) | |||
| 1224 | struct p9_client *clnt; | 1248 | struct p9_client *clnt; |
| 1225 | 1249 | ||
| 1226 | P9_DPRINTK(P9_DEBUG_9P, ">>> TWSTAT fid %d\n", fid->fid); | 1250 | P9_DPRINTK(P9_DEBUG_9P, ">>> TWSTAT fid %d\n", fid->fid); |
| 1251 | P9_DPRINTK(P9_DEBUG_9P, | ||
| 1252 | " sz=%x type=%x dev=%x qid=%x.%llx.%x\n" | ||
| 1253 | " mode=%8.8x atime=%8.8x mtime=%8.8x length=%llx\n" | ||
| 1254 | " name=%s uid=%s gid=%s muid=%s extension=(%s)\n" | ||
| 1255 | " uid=%d gid=%d n_muid=%d\n", | ||
| 1256 | wst->size, wst->type, wst->dev, wst->qid.type, | ||
| 1257 | wst->qid.path, wst->qid.version, wst->mode, | ||
| 1258 | wst->atime, wst->mtime, wst->length, wst->name, | ||
| 1259 | wst->uid, wst->gid, wst->muid, wst->extension, | ||
| 1260 | wst->n_uid, wst->n_gid, wst->n_muid); | ||
| 1227 | err = 0; | 1261 | err = 0; |
| 1228 | clnt = fid->clnt; | 1262 | clnt = fid->clnt; |
| 1229 | 1263 | ||
diff --git a/net/9p/protocol.c b/net/9p/protocol.c index 92cb60bb191b..84fa21271876 100644 --- a/net/9p/protocol.c +++ b/net/9p/protocol.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/module.h> | 28 | #include <linux/module.h> |
| 29 | #include <linux/errno.h> | 29 | #include <linux/errno.h> |
| 30 | #include <linux/uaccess.h> | 30 | #include <linux/uaccess.h> |
| 31 | #include <linux/sched.h> | ||
| 31 | #include <net/9p/9p.h> | 32 | #include <net/9p/9p.h> |
| 32 | #include <net/9p/client.h> | 33 | #include <net/9p/client.h> |
| 33 | #include "protocol.h" | 34 | #include "protocol.h" |
| @@ -52,8 +53,6 @@ | |||
| 52 | static int | 53 | static int |
| 53 | p9pdu_writef(struct p9_fcall *pdu, int optional, const char *fmt, ...); | 54 | p9pdu_writef(struct p9_fcall *pdu, int optional, const char *fmt, ...); |
| 54 | 55 | ||
| 55 | #define PACKET_DEBUG 0 | ||
| 56 | |||
| 57 | void | 56 | void |
| 58 | p9pdu_dump(int way, struct p9_fcall *pdu) | 57 | p9pdu_dump(int way, struct p9_fcall *pdu) |
| 59 | { | 58 | { |
| @@ -78,9 +77,9 @@ p9pdu_dump(int way, struct p9_fcall *pdu) | |||
| 78 | n += scnprintf(buf + n, buflen - n, "\n"); | 77 | n += scnprintf(buf + n, buflen - n, "\n"); |
| 79 | 78 | ||
| 80 | if (way) | 79 | if (way) |
| 81 | printk(KERN_NOTICE "[[(%d)[ %s\n", datalen, buf); | 80 | P9_DPRINTK(P9_DEBUG_PKT, "[[[(%d) %s\n", datalen, buf); |
| 82 | else | 81 | else |
| 83 | printk(KERN_NOTICE "]](%d)] %s\n", datalen, buf); | 82 | P9_DPRINTK(P9_DEBUG_PKT, "]]](%d) %s\n", datalen, buf); |
| 84 | } | 83 | } |
| 85 | EXPORT_SYMBOL(p9pdu_dump); | 84 | EXPORT_SYMBOL(p9pdu_dump); |
| 86 | 85 | ||
| @@ -512,13 +511,20 @@ p9pdu_writef(struct p9_fcall *pdu, int optional, const char *fmt, ...) | |||
| 512 | int p9stat_read(char *buf, int len, struct p9_wstat *st, int dotu) | 511 | int p9stat_read(char *buf, int len, struct p9_wstat *st, int dotu) |
| 513 | { | 512 | { |
| 514 | struct p9_fcall fake_pdu; | 513 | struct p9_fcall fake_pdu; |
| 514 | int ret; | ||
| 515 | 515 | ||
| 516 | fake_pdu.size = len; | 516 | fake_pdu.size = len; |
| 517 | fake_pdu.capacity = len; | 517 | fake_pdu.capacity = len; |
| 518 | fake_pdu.sdata = buf; | 518 | fake_pdu.sdata = buf; |
| 519 | fake_pdu.offset = 0; | 519 | fake_pdu.offset = 0; |
| 520 | 520 | ||
| 521 | return p9pdu_readf(&fake_pdu, dotu, "S", st); | 521 | ret = p9pdu_readf(&fake_pdu, dotu, "S", st); |
| 522 | if (ret) { | ||
| 523 | P9_DPRINTK(P9_DEBUG_9P, "<<< p9stat_read failed: %d\n", ret); | ||
| 524 | p9pdu_dump(1, &fake_pdu); | ||
| 525 | } | ||
| 526 | |||
| 527 | return ret; | ||
| 522 | } | 528 | } |
| 523 | EXPORT_SYMBOL(p9stat_read); | 529 | EXPORT_SYMBOL(p9stat_read); |
| 524 | 530 | ||
| @@ -536,9 +542,12 @@ int p9pdu_finalize(struct p9_fcall *pdu) | |||
| 536 | err = p9pdu_writef(pdu, 0, "d", size); | 542 | err = p9pdu_writef(pdu, 0, "d", size); |
| 537 | pdu->size = size; | 543 | pdu->size = size; |
| 538 | 544 | ||
| 539 | if (PACKET_DEBUG) | 545 | if ((p9_debug_level & P9_DEBUG_PKT) == P9_DEBUG_PKT) |
| 540 | p9pdu_dump(0, pdu); | 546 | p9pdu_dump(0, pdu); |
| 541 | 547 | ||
| 548 | P9_DPRINTK(P9_DEBUG_9P, ">>> size=%d type: %d tag: %d\n", pdu->size, | ||
| 549 | pdu->id, pdu->tag); | ||
| 550 | |||
| 542 | return err; | 551 | return err; |
| 543 | } | 552 | } |
| 544 | 553 | ||
