root / hw / virtio-9p-debug.c @ 79d1d331
History | View | Annotate | Download (13.1 kB)
1 | 9f107513 | Anthony Liguori | /*
|
---|---|---|---|
2 | 9f107513 | Anthony Liguori | * Virtio 9p PDU debug
|
3 | 9f107513 | Anthony Liguori | *
|
4 | 9f107513 | Anthony Liguori | * Copyright IBM, Corp. 2010
|
5 | 9f107513 | Anthony Liguori | *
|
6 | 9f107513 | Anthony Liguori | * Authors:
|
7 | 9f107513 | Anthony Liguori | * Anthony Liguori <aliguori@us.ibm.com>
|
8 | 9f107513 | Anthony Liguori | *
|
9 | 9f107513 | Anthony Liguori | * This work is licensed under the terms of the GNU GPL, version 2. See
|
10 | 9f107513 | Anthony Liguori | * the COPYING file in the top-level directory.
|
11 | 9f107513 | Anthony Liguori | *
|
12 | 9f107513 | Anthony Liguori | */
|
13 | 9f107513 | Anthony Liguori | #include "virtio.h" |
14 | 9f107513 | Anthony Liguori | #include "pc.h" |
15 | 9f107513 | Anthony Liguori | #include "virtio-9p.h" |
16 | 9f107513 | Anthony Liguori | #include "virtio-9p-debug.h" |
17 | 9f107513 | Anthony Liguori | |
18 | 9f107513 | Anthony Liguori | #define BUG_ON(cond) assert(!(cond))
|
19 | 9f107513 | Anthony Liguori | |
20 | 9f107513 | Anthony Liguori | static FILE *llogfile;
|
21 | 9f107513 | Anthony Liguori | |
22 | 9f107513 | Anthony Liguori | static struct iovec *get_sg(V9fsPDU *pdu, int rx) |
23 | 9f107513 | Anthony Liguori | { |
24 | 9f107513 | Anthony Liguori | if (rx) {
|
25 | 9f107513 | Anthony Liguori | return pdu->elem.in_sg;
|
26 | 9f107513 | Anthony Liguori | } |
27 | 9f107513 | Anthony Liguori | return pdu->elem.out_sg;
|
28 | 9f107513 | Anthony Liguori | } |
29 | 9f107513 | Anthony Liguori | |
30 | 9f107513 | Anthony Liguori | static int get_sg_count(V9fsPDU *pdu, int rx) |
31 | 9f107513 | Anthony Liguori | { |
32 | 9f107513 | Anthony Liguori | if (rx) {
|
33 | 9f107513 | Anthony Liguori | return pdu->elem.in_num;
|
34 | 9f107513 | Anthony Liguori | } |
35 | 9f107513 | Anthony Liguori | return pdu->elem.out_num;
|
36 | 9f107513 | Anthony Liguori | |
37 | 9f107513 | Anthony Liguori | } |
38 | 9f107513 | Anthony Liguori | |
39 | 9f107513 | Anthony Liguori | static void pprint_int8(V9fsPDU *pdu, int rx, size_t *offsetp, |
40 | 9f107513 | Anthony Liguori | const char *name) |
41 | 9f107513 | Anthony Liguori | { |
42 | 9f107513 | Anthony Liguori | size_t copied; |
43 | 9f107513 | Anthony Liguori | int count = get_sg_count(pdu, rx);
|
44 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
45 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
46 | 9f107513 | Anthony Liguori | int8_t value; |
47 | 9f107513 | Anthony Liguori | |
48 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value));
|
49 | 9f107513 | Anthony Liguori | |
50 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(value));
|
51 | 9f107513 | Anthony Liguori | offset += sizeof(value);
|
52 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s=0x%x", name, value);
|
53 | 9f107513 | Anthony Liguori | *offsetp = offset; |
54 | 9f107513 | Anthony Liguori | } |
55 | 9f107513 | Anthony Liguori | |
56 | 9f107513 | Anthony Liguori | static void pprint_int16(V9fsPDU *pdu, int rx, size_t *offsetp, |
57 | 9f107513 | Anthony Liguori | const char *name) |
58 | 9f107513 | Anthony Liguori | { |
59 | 9f107513 | Anthony Liguori | size_t copied; |
60 | 9f107513 | Anthony Liguori | int count = get_sg_count(pdu, rx);
|
61 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
62 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
63 | 9f107513 | Anthony Liguori | int16_t value; |
64 | 9f107513 | Anthony Liguori | |
65 | 9f107513 | Anthony Liguori | |
66 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value));
|
67 | 9f107513 | Anthony Liguori | |
68 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(value));
|
69 | 9f107513 | Anthony Liguori | offset += sizeof(value);
|
70 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s=0x%x", name, value);
|
71 | 9f107513 | Anthony Liguori | *offsetp = offset; |
72 | 9f107513 | Anthony Liguori | } |
73 | 9f107513 | Anthony Liguori | |
74 | 9f107513 | Anthony Liguori | static void pprint_int32(V9fsPDU *pdu, int rx, size_t *offsetp, |
75 | 9f107513 | Anthony Liguori | const char *name) |
76 | 9f107513 | Anthony Liguori | { |
77 | 9f107513 | Anthony Liguori | size_t copied; |
78 | 9f107513 | Anthony Liguori | int count = get_sg_count(pdu, rx);
|
79 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
80 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
81 | 9f107513 | Anthony Liguori | int32_t value; |
82 | 9f107513 | Anthony Liguori | |
83 | 9f107513 | Anthony Liguori | |
84 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value));
|
85 | 9f107513 | Anthony Liguori | |
86 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(value));
|
87 | 9f107513 | Anthony Liguori | offset += sizeof(value);
|
88 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s=0x%x", name, value);
|
89 | 9f107513 | Anthony Liguori | *offsetp = offset; |
90 | 9f107513 | Anthony Liguori | } |
91 | 9f107513 | Anthony Liguori | |
92 | 9f107513 | Anthony Liguori | static void pprint_int64(V9fsPDU *pdu, int rx, size_t *offsetp, |
93 | 9f107513 | Anthony Liguori | const char *name) |
94 | 9f107513 | Anthony Liguori | { |
95 | 9f107513 | Anthony Liguori | size_t copied; |
96 | 9f107513 | Anthony Liguori | int count = get_sg_count(pdu, rx);
|
97 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
98 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
99 | 9f107513 | Anthony Liguori | int64_t value; |
100 | 9f107513 | Anthony Liguori | |
101 | 9f107513 | Anthony Liguori | |
102 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value));
|
103 | 9f107513 | Anthony Liguori | |
104 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(value));
|
105 | 9f107513 | Anthony Liguori | offset += sizeof(value);
|
106 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s=0x%" PRIx64, name, value);
|
107 | 9f107513 | Anthony Liguori | *offsetp = offset; |
108 | 9f107513 | Anthony Liguori | } |
109 | 9f107513 | Anthony Liguori | |
110 | 9f107513 | Anthony Liguori | static void pprint_str(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
111 | 9f107513 | Anthony Liguori | { |
112 | 9f107513 | Anthony Liguori | int sg_count = get_sg_count(pdu, rx);
|
113 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
114 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
115 | 9f107513 | Anthony Liguori | uint16_t tmp_size, size; |
116 | 9f107513 | Anthony Liguori | size_t result; |
117 | 9f107513 | Anthony Liguori | size_t copied = 0;
|
118 | 9f107513 | Anthony Liguori | int i = 0; |
119 | 9f107513 | Anthony Liguori | |
120 | 9f107513 | Anthony Liguori | /* get the size */
|
121 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&tmp_size, sg, sg_count, offset, sizeof(tmp_size));
|
122 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(tmp_size));
|
123 | 9f107513 | Anthony Liguori | size = le16_to_cpupu(&tmp_size); |
124 | 9f107513 | Anthony Liguori | offset += copied; |
125 | 9f107513 | Anthony Liguori | |
126 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s=", name);
|
127 | 9f107513 | Anthony Liguori | for (i = 0; size && i < sg_count; i++) { |
128 | 9f107513 | Anthony Liguori | size_t len; |
129 | 9f107513 | Anthony Liguori | if (offset >= sg[i].iov_len) {
|
130 | 9f107513 | Anthony Liguori | /* skip this sg */
|
131 | 9f107513 | Anthony Liguori | offset -= sg[i].iov_len; |
132 | 9f107513 | Anthony Liguori | continue;
|
133 | 9f107513 | Anthony Liguori | } else {
|
134 | 9f107513 | Anthony Liguori | len = MIN(sg[i].iov_len - offset, size); |
135 | 9f107513 | Anthony Liguori | result = fwrite(sg[i].iov_base + offset, 1, len, llogfile);
|
136 | 9f107513 | Anthony Liguori | BUG_ON(result != len); |
137 | 9f107513 | Anthony Liguori | size -= len; |
138 | 9f107513 | Anthony Liguori | copied += len; |
139 | 9f107513 | Anthony Liguori | if (size) {
|
140 | 9f107513 | Anthony Liguori | offset = 0;
|
141 | 9f107513 | Anthony Liguori | continue;
|
142 | 9f107513 | Anthony Liguori | } |
143 | 9f107513 | Anthony Liguori | } |
144 | 9f107513 | Anthony Liguori | } |
145 | 9f107513 | Anthony Liguori | *offsetp += copied; |
146 | 9f107513 | Anthony Liguori | } |
147 | 9f107513 | Anthony Liguori | |
148 | 9f107513 | Anthony Liguori | static void pprint_qid(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
149 | 9f107513 | Anthony Liguori | { |
150 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={", name);
|
151 | 9f107513 | Anthony Liguori | pprint_int8(pdu, rx, offsetp, "type");
|
152 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", version");
|
153 | 9f107513 | Anthony Liguori | pprint_int64(pdu, rx, offsetp, ", path");
|
154 | 9f107513 | Anthony Liguori | fprintf(llogfile, "}");
|
155 | 9f107513 | Anthony Liguori | } |
156 | 9f107513 | Anthony Liguori | |
157 | 9f107513 | Anthony Liguori | static void pprint_stat(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
158 | 9f107513 | Anthony Liguori | { |
159 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={", name);
|
160 | 9f107513 | Anthony Liguori | pprint_int16(pdu, rx, offsetp, "size");
|
161 | 9f107513 | Anthony Liguori | pprint_int16(pdu, rx, offsetp, ", type");
|
162 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", dev");
|
163 | 9f107513 | Anthony Liguori | pprint_qid(pdu, rx, offsetp, ", qid");
|
164 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", mode");
|
165 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", atime");
|
166 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", mtime");
|
167 | 9f107513 | Anthony Liguori | pprint_int64(pdu, rx, offsetp, ", length");
|
168 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, offsetp, ", name");
|
169 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, offsetp, ", uid");
|
170 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, offsetp, ", gid");
|
171 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, offsetp, ", muid");
|
172 | 9f107513 | Anthony Liguori | if (dotu) {
|
173 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, offsetp, ", extension");
|
174 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", uid");
|
175 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", gid");
|
176 | 9f107513 | Anthony Liguori | pprint_int32(pdu, rx, offsetp, ", muid");
|
177 | 9f107513 | Anthony Liguori | } |
178 | 9f107513 | Anthony Liguori | fprintf(llogfile, "}");
|
179 | 9f107513 | Anthony Liguori | } |
180 | 9f107513 | Anthony Liguori | |
181 | 9f107513 | Anthony Liguori | static void pprint_strs(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
182 | 9f107513 | Anthony Liguori | { |
183 | 9f107513 | Anthony Liguori | int sg_count = get_sg_count(pdu, rx);
|
184 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
185 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
186 | 9f107513 | Anthony Liguori | uint16_t tmp_count, count, i; |
187 | 9f107513 | Anthony Liguori | size_t copied = 0;
|
188 | 9f107513 | Anthony Liguori | |
189 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={", name);
|
190 | 9f107513 | Anthony Liguori | |
191 | 9f107513 | Anthony Liguori | /* Get the count */
|
192 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count));
|
193 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(tmp_count));
|
194 | 9f107513 | Anthony Liguori | count = le16_to_cpupu(&tmp_count); |
195 | 9f107513 | Anthony Liguori | offset += copied; |
196 | 9f107513 | Anthony Liguori | |
197 | 9f107513 | Anthony Liguori | for (i = 0; i < count; i++) { |
198 | 9f107513 | Anthony Liguori | char str[512]; |
199 | 9f107513 | Anthony Liguori | if (i) {
|
200 | 9f107513 | Anthony Liguori | fprintf(llogfile, ", ");
|
201 | 9f107513 | Anthony Liguori | } |
202 | 9f107513 | Anthony Liguori | snprintf(str, sizeof(str), "[%d]", i); |
203 | 9f107513 | Anthony Liguori | pprint_str(pdu, rx, &offset, str); |
204 | 9f107513 | Anthony Liguori | } |
205 | 9f107513 | Anthony Liguori | |
206 | 9f107513 | Anthony Liguori | fprintf(llogfile, "}");
|
207 | 9f107513 | Anthony Liguori | |
208 | 9f107513 | Anthony Liguori | *offsetp = offset; |
209 | 9f107513 | Anthony Liguori | } |
210 | 9f107513 | Anthony Liguori | |
211 | 9f107513 | Anthony Liguori | static void pprint_qids(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
212 | 9f107513 | Anthony Liguori | { |
213 | 9f107513 | Anthony Liguori | int sg_count = get_sg_count(pdu, rx);
|
214 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
215 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
216 | 9f107513 | Anthony Liguori | uint16_t tmp_count, count, i; |
217 | 9f107513 | Anthony Liguori | size_t copied = 0;
|
218 | 9f107513 | Anthony Liguori | |
219 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={", name);
|
220 | 9f107513 | Anthony Liguori | |
221 | 9f107513 | Anthony Liguori | copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count));
|
222 | 9f107513 | Anthony Liguori | BUG_ON(copied != sizeof(tmp_count));
|
223 | 9f107513 | Anthony Liguori | count = le16_to_cpupu(&tmp_count); |
224 | 9f107513 | Anthony Liguori | offset += copied; |
225 | 9f107513 | Anthony Liguori | |
226 | 9f107513 | Anthony Liguori | for (i = 0; i < count; i++) { |
227 | 9f107513 | Anthony Liguori | char str[512]; |
228 | 9f107513 | Anthony Liguori | if (i) {
|
229 | 9f107513 | Anthony Liguori | fprintf(llogfile, ", ");
|
230 | 9f107513 | Anthony Liguori | } |
231 | 9f107513 | Anthony Liguori | snprintf(str, sizeof(str), "[%d]", i); |
232 | 9f107513 | Anthony Liguori | pprint_qid(pdu, rx, &offset, str); |
233 | 9f107513 | Anthony Liguori | } |
234 | 9f107513 | Anthony Liguori | |
235 | 9f107513 | Anthony Liguori | fprintf(llogfile, "}");
|
236 | 9f107513 | Anthony Liguori | |
237 | 9f107513 | Anthony Liguori | *offsetp = offset; |
238 | 9f107513 | Anthony Liguori | } |
239 | 9f107513 | Anthony Liguori | |
240 | 9f107513 | Anthony Liguori | static void pprint_sg(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
241 | 9f107513 | Anthony Liguori | { |
242 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
243 | 9f107513 | Anthony Liguori | unsigned int count; |
244 | 9f107513 | Anthony Liguori | int i;
|
245 | 9f107513 | Anthony Liguori | |
246 | 9f107513 | Anthony Liguori | if (rx) {
|
247 | 9f107513 | Anthony Liguori | count = pdu->elem.in_num; |
248 | 9f107513 | Anthony Liguori | } else {
|
249 | 9f107513 | Anthony Liguori | count = pdu->elem.out_num; |
250 | 9f107513 | Anthony Liguori | } |
251 | 9f107513 | Anthony Liguori | |
252 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={", name);
|
253 | 9f107513 | Anthony Liguori | for (i = 0; i < count; i++) { |
254 | 9f107513 | Anthony Liguori | if (i) {
|
255 | 9f107513 | Anthony Liguori | fprintf(llogfile, ", ");
|
256 | 9f107513 | Anthony Liguori | } |
257 | 9f107513 | Anthony Liguori | fprintf(llogfile, "(%p, 0x%zx)", sg[i].iov_base, sg[i].iov_len);
|
258 | 9f107513 | Anthony Liguori | } |
259 | 9f107513 | Anthony Liguori | fprintf(llogfile, "}");
|
260 | 9f107513 | Anthony Liguori | } |
261 | 9f107513 | Anthony Liguori | |
262 | 9f107513 | Anthony Liguori | /* FIXME: read from a directory fid returns serialized stat_t's */
|
263 | 9f107513 | Anthony Liguori | #ifdef DEBUG_DATA
|
264 | 9f107513 | Anthony Liguori | static void pprint_data(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) |
265 | 9f107513 | Anthony Liguori | { |
266 | 9f107513 | Anthony Liguori | struct iovec *sg = get_sg(pdu, rx);
|
267 | 9f107513 | Anthony Liguori | size_t offset = *offsetp; |
268 | 9f107513 | Anthony Liguori | unsigned int count; |
269 | 9f107513 | Anthony Liguori | int32_t size; |
270 | 9f107513 | Anthony Liguori | int total, i, j;
|
271 | 9f107513 | Anthony Liguori | ssize_t len; |
272 | 9f107513 | Anthony Liguori | |
273 | 9f107513 | Anthony Liguori | if (rx) {
|
274 | 9f107513 | Anthony Liguori | count = pdu->elem.in_num; |
275 | 9f107513 | Anthony Liguori | } else
|
276 | 9f107513 | Anthony Liguori | count = pdu->elem.out_num; |
277 | 9f107513 | Anthony Liguori | } |
278 | 9f107513 | Anthony Liguori | |
279 | 9f107513 | Anthony Liguori | BUG_ON((offset + sizeof(size)) > sg[0].iov_len); |
280 | 9f107513 | Anthony Liguori | |
281 | 9f107513 | Anthony Liguori | memcpy(&size, sg[0].iov_base + offset, sizeof(size)); |
282 | 9f107513 | Anthony Liguori | offset += sizeof(size);
|
283 | 9f107513 | Anthony Liguori | |
284 | 9f107513 | Anthony Liguori | fprintf(llogfile, "size: %x\n", size);
|
285 | 9f107513 | Anthony Liguori | |
286 | 9f107513 | Anthony Liguori | sg[0].iov_base += 11; /* skip header */ |
287 | 9f107513 | Anthony Liguori | sg[0].iov_len -= 11; |
288 | 9f107513 | Anthony Liguori | |
289 | 9f107513 | Anthony Liguori | total = 0;
|
290 | 9f107513 | Anthony Liguori | for (i = 0; i < count; i++) { |
291 | 9f107513 | Anthony Liguori | total += sg[i].iov_len; |
292 | 9f107513 | Anthony Liguori | if (total >= size) {
|
293 | 9f107513 | Anthony Liguori | /* trim sg list so writev does the right thing */
|
294 | 9f107513 | Anthony Liguori | sg[i].iov_len -= (total - size); |
295 | 9f107513 | Anthony Liguori | i++; |
296 | 9f107513 | Anthony Liguori | break;
|
297 | 9f107513 | Anthony Liguori | } |
298 | 9f107513 | Anthony Liguori | } |
299 | 9f107513 | Anthony Liguori | |
300 | 9f107513 | Anthony Liguori | fprintf(llogfile, "%s={\"", name);
|
301 | 9f107513 | Anthony Liguori | fflush(llogfile); |
302 | 9f107513 | Anthony Liguori | for (j = 0; j < i; j++) { |
303 | 9f107513 | Anthony Liguori | if (j) {
|
304 | 9f107513 | Anthony Liguori | fprintf(llogfile, "\", \"");
|
305 | 9f107513 | Anthony Liguori | fflush(llogfile); |
306 | 9f107513 | Anthony Liguori | } |
307 | 9f107513 | Anthony Liguori | |
308 | 9f107513 | Anthony Liguori | do {
|
309 | 9f107513 | Anthony Liguori | len = writev(fileno(llogfile), &sg[j], 1);
|
310 | 9f107513 | Anthony Liguori | } while (len == -1 && errno == EINTR); |
311 | 9f107513 | Anthony Liguori | fprintf(llogfile, "len == %ld: %m\n", len);
|
312 | 9f107513 | Anthony Liguori | BUG_ON(len != sg[j].iov_len); |
313 | 9f107513 | Anthony Liguori | } |
314 | 9f107513 | Anthony Liguori | fprintf(llogfile, "\"}");
|
315 | 9f107513 | Anthony Liguori | |
316 | 9f107513 | Anthony Liguori | sg[0].iov_base -= 11; |
317 | 9f107513 | Anthony Liguori | sg[0].iov_len += 11; |
318 | 9f107513 | Anthony Liguori | |
319 | 9f107513 | Anthony Liguori | } |
320 | 9f107513 | Anthony Liguori | #endif
|
321 | 9f107513 | Anthony Liguori | |
322 | 9f107513 | Anthony Liguori | void pprint_pdu(V9fsPDU *pdu)
|
323 | 9f107513 | Anthony Liguori | { |
324 | 9f107513 | Anthony Liguori | size_t offset = 7;
|
325 | 9f107513 | Anthony Liguori | |
326 | 9f107513 | Anthony Liguori | if (llogfile == NULL) { |
327 | 9f107513 | Anthony Liguori | llogfile = fopen("/tmp/pdu.log", "w"); |
328 | 9f107513 | Anthony Liguori | } |
329 | 9f107513 | Anthony Liguori | |
330 | a03c54f1 | Sripathi Kodi | BUG_ON(!llogfile); |
331 | a03c54f1 | Sripathi Kodi | |
332 | 9f107513 | Anthony Liguori | switch (pdu->id) {
|
333 | 9f107513 | Anthony Liguori | case P9_TVERSION:
|
334 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TVERSION: (");
|
335 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "msize"); |
336 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", version"); |
337 | 9f107513 | Anthony Liguori | break;
|
338 | 9f107513 | Anthony Liguori | case P9_RVERSION:
|
339 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RVERSION: (");
|
340 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, "msize"); |
341 | 9f107513 | Anthony Liguori | pprint_str(pdu, 1, &offset, ", version"); |
342 | 9f107513 | Anthony Liguori | break;
|
343 | 9f107513 | Anthony Liguori | case P9_TAUTH:
|
344 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TAUTH: (");
|
345 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "afid"); |
346 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", uname"); |
347 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", aname"); |
348 | 9f107513 | Anthony Liguori | if (dotu) {
|
349 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", n_uname"); |
350 | 9f107513 | Anthony Liguori | } |
351 | 9f107513 | Anthony Liguori | break;
|
352 | 9f107513 | Anthony Liguori | case P9_RAUTH:
|
353 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RAUTH: (");
|
354 | 9f107513 | Anthony Liguori | pprint_qid(pdu, 1, &offset, "qid"); |
355 | 9f107513 | Anthony Liguori | break;
|
356 | 9f107513 | Anthony Liguori | case P9_TATTACH:
|
357 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TATTACH: (");
|
358 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
359 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", afid"); |
360 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", uname"); |
361 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", aname"); |
362 | 9f107513 | Anthony Liguori | if (dotu) {
|
363 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", n_uname"); |
364 | 9f107513 | Anthony Liguori | } |
365 | 9f107513 | Anthony Liguori | break;
|
366 | 9f107513 | Anthony Liguori | case P9_RATTACH:
|
367 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RATTACH: (");
|
368 | 9f107513 | Anthony Liguori | pprint_qid(pdu, 1, &offset, "qid"); |
369 | 9f107513 | Anthony Liguori | break;
|
370 | 9f107513 | Anthony Liguori | case P9_TERROR:
|
371 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TERROR: (");
|
372 | 9f107513 | Anthony Liguori | break;
|
373 | 9f107513 | Anthony Liguori | case P9_RERROR:
|
374 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RERROR: (");
|
375 | 9f107513 | Anthony Liguori | pprint_str(pdu, 1, &offset, "ename"); |
376 | 9f107513 | Anthony Liguori | if (dotu) {
|
377 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, ", ecode"); |
378 | 9f107513 | Anthony Liguori | } |
379 | 9f107513 | Anthony Liguori | break;
|
380 | 9f107513 | Anthony Liguori | case P9_TFLUSH:
|
381 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TFLUSH: (");
|
382 | 9f107513 | Anthony Liguori | pprint_int16(pdu, 0, &offset, "oldtag"); |
383 | 9f107513 | Anthony Liguori | break;
|
384 | 9f107513 | Anthony Liguori | case P9_RFLUSH:
|
385 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RFLUSH: (");
|
386 | 9f107513 | Anthony Liguori | break;
|
387 | 9f107513 | Anthony Liguori | case P9_TWALK:
|
388 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TWALK: (");
|
389 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
390 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", newfid"); |
391 | 9f107513 | Anthony Liguori | pprint_strs(pdu, 0, &offset, ", wnames"); |
392 | 9f107513 | Anthony Liguori | break;
|
393 | 9f107513 | Anthony Liguori | case P9_RWALK:
|
394 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RWALK: (");
|
395 | 9f107513 | Anthony Liguori | pprint_qids(pdu, 1, &offset, "wqids"); |
396 | 9f107513 | Anthony Liguori | break;
|
397 | 9f107513 | Anthony Liguori | case P9_TOPEN:
|
398 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TOPEN: (");
|
399 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
400 | 9f107513 | Anthony Liguori | pprint_int8(pdu, 0, &offset, ", mode"); |
401 | 9f107513 | Anthony Liguori | break;
|
402 | 9f107513 | Anthony Liguori | case P9_ROPEN:
|
403 | 9f107513 | Anthony Liguori | fprintf(llogfile, "ROPEN: (");
|
404 | 9f107513 | Anthony Liguori | pprint_qid(pdu, 1, &offset, "qid"); |
405 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, ", iounit"); |
406 | 9f107513 | Anthony Liguori | break;
|
407 | 9f107513 | Anthony Liguori | case P9_TCREATE:
|
408 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TCREATE: (");
|
409 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
410 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", name"); |
411 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", perm"); |
412 | 9f107513 | Anthony Liguori | pprint_int8(pdu, 0, &offset, ", mode"); |
413 | 9f107513 | Anthony Liguori | if (dotu) {
|
414 | 9f107513 | Anthony Liguori | pprint_str(pdu, 0, &offset, ", extension"); |
415 | 9f107513 | Anthony Liguori | } |
416 | 9f107513 | Anthony Liguori | break;
|
417 | 9f107513 | Anthony Liguori | case P9_RCREATE:
|
418 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RCREATE: (");
|
419 | 9f107513 | Anthony Liguori | pprint_qid(pdu, 1, &offset, "qid"); |
420 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, ", iounit"); |
421 | 9f107513 | Anthony Liguori | break;
|
422 | 9f107513 | Anthony Liguori | case P9_TREAD:
|
423 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TREAD: (");
|
424 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
425 | 9f107513 | Anthony Liguori | pprint_int64(pdu, 0, &offset, ", offset"); |
426 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", count"); |
427 | 9f107513 | Anthony Liguori | pprint_sg(pdu, 0, &offset, ", sg"); |
428 | 9f107513 | Anthony Liguori | break;
|
429 | 9f107513 | Anthony Liguori | case P9_RREAD:
|
430 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RREAD: (");
|
431 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, "count"); |
432 | 9f107513 | Anthony Liguori | pprint_sg(pdu, 1, &offset, ", sg"); |
433 | 9f107513 | Anthony Liguori | offset = 7;
|
434 | 9f107513 | Anthony Liguori | #ifdef DEBUG_DATA
|
435 | 9f107513 | Anthony Liguori | pprint_data(pdu, 1, &offset, ", data"); |
436 | 9f107513 | Anthony Liguori | #endif
|
437 | 9f107513 | Anthony Liguori | break;
|
438 | 9f107513 | Anthony Liguori | case P9_TWRITE:
|
439 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TWRITE: (");
|
440 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
441 | 9f107513 | Anthony Liguori | pprint_int64(pdu, 0, &offset, ", offset"); |
442 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, ", count"); |
443 | 9f107513 | Anthony Liguori | break;
|
444 | 9f107513 | Anthony Liguori | case P9_RWRITE:
|
445 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RWRITE: (");
|
446 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 1, &offset, "count"); |
447 | 9f107513 | Anthony Liguori | break;
|
448 | 9f107513 | Anthony Liguori | case P9_TCLUNK:
|
449 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TCLUNK: (");
|
450 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
451 | 9f107513 | Anthony Liguori | break;
|
452 | 9f107513 | Anthony Liguori | case P9_RCLUNK:
|
453 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RCLUNK: (");
|
454 | 9f107513 | Anthony Liguori | break;
|
455 | 9f107513 | Anthony Liguori | case P9_TREMOVE:
|
456 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TREMOVE: (");
|
457 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
458 | 9f107513 | Anthony Liguori | break;
|
459 | 9f107513 | Anthony Liguori | case P9_RREMOVE:
|
460 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RREMOVE: (");
|
461 | 9f107513 | Anthony Liguori | break;
|
462 | 9f107513 | Anthony Liguori | case P9_TSTAT:
|
463 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TSTAT: (");
|
464 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
465 | 9f107513 | Anthony Liguori | break;
|
466 | 9f107513 | Anthony Liguori | case P9_RSTAT:
|
467 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RSTAT: (");
|
468 | 9f107513 | Anthony Liguori | offset += 2; /* ignored */ |
469 | 9f107513 | Anthony Liguori | pprint_stat(pdu, 1, &offset, "stat"); |
470 | 9f107513 | Anthony Liguori | break;
|
471 | 9f107513 | Anthony Liguori | case P9_TWSTAT:
|
472 | 9f107513 | Anthony Liguori | fprintf(llogfile, "TWSTAT: (");
|
473 | 9f107513 | Anthony Liguori | pprint_int32(pdu, 0, &offset, "fid"); |
474 | 9f107513 | Anthony Liguori | offset += 2; /* ignored */ |
475 | 9f107513 | Anthony Liguori | pprint_stat(pdu, 0, &offset, ", stat"); |
476 | 9f107513 | Anthony Liguori | break;
|
477 | 9f107513 | Anthony Liguori | case P9_RWSTAT:
|
478 | 9f107513 | Anthony Liguori | fprintf(llogfile, "RWSTAT: (");
|
479 | 9f107513 | Anthony Liguori | break;
|
480 | 9f107513 | Anthony Liguori | default:
|
481 | 9f107513 | Anthony Liguori | fprintf(llogfile, "unknown(%d): (", pdu->id);
|
482 | 9f107513 | Anthony Liguori | break;
|
483 | 9f107513 | Anthony Liguori | } |
484 | 9f107513 | Anthony Liguori | |
485 | 9f107513 | Anthony Liguori | fprintf(llogfile, ")\n");
|
486 | 0db09dd2 | Venkateswararao Jujjuri (JV) | /* Flush the log message out */
|
487 | 0db09dd2 | Venkateswararao Jujjuri (JV) | fflush(llogfile); |
488 | 9f107513 | Anthony Liguori | } |