|
|
1.1 ! root 1: /* ! 2: * Virtio 9p PDU debug ! 3: * ! 4: * Copyright IBM, Corp. 2010 ! 5: * ! 6: * Authors: ! 7: * Anthony Liguori <[email protected]> ! 8: * ! 9: * This work is licensed under the terms of the GNU GPL, version 2. See ! 10: * the COPYING file in the top-level directory. ! 11: * ! 12: */ ! 13: ! 14: #include "hw/virtio.h" ! 15: #include "hw/pc.h" ! 16: #include "virtio-9p.h" ! 17: #include "virtio-9p-debug.h" ! 18: ! 19: #define BUG_ON(cond) assert(!(cond)) ! 20: ! 21: static FILE *llogfile; ! 22: ! 23: static struct iovec *get_sg(V9fsPDU *pdu, int rx) ! 24: { ! 25: if (rx) { ! 26: return pdu->elem.in_sg; ! 27: } ! 28: return pdu->elem.out_sg; ! 29: } ! 30: ! 31: static int get_sg_count(V9fsPDU *pdu, int rx) ! 32: { ! 33: if (rx) { ! 34: return pdu->elem.in_num; ! 35: } ! 36: return pdu->elem.out_num; ! 37: ! 38: } ! 39: ! 40: static void pprint_int8(V9fsPDU *pdu, int rx, size_t *offsetp, ! 41: const char *name) ! 42: { ! 43: size_t copied; ! 44: int count = get_sg_count(pdu, rx); ! 45: size_t offset = *offsetp; ! 46: struct iovec *sg = get_sg(pdu, rx); ! 47: int8_t value; ! 48: ! 49: copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value)); ! 50: ! 51: BUG_ON(copied != sizeof(value)); ! 52: offset += sizeof(value); ! 53: fprintf(llogfile, "%s=0x%x", name, value); ! 54: *offsetp = offset; ! 55: } ! 56: ! 57: static void pprint_int16(V9fsPDU *pdu, int rx, size_t *offsetp, ! 58: const char *name) ! 59: { ! 60: size_t copied; ! 61: int count = get_sg_count(pdu, rx); ! 62: struct iovec *sg = get_sg(pdu, rx); ! 63: size_t offset = *offsetp; ! 64: int16_t value; ! 65: ! 66: ! 67: copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value)); ! 68: ! 69: BUG_ON(copied != sizeof(value)); ! 70: offset += sizeof(value); ! 71: fprintf(llogfile, "%s=0x%x", name, value); ! 72: *offsetp = offset; ! 73: } ! 74: ! 75: static void pprint_int32(V9fsPDU *pdu, int rx, size_t *offsetp, ! 76: const char *name) ! 77: { ! 78: size_t copied; ! 79: int count = get_sg_count(pdu, rx); ! 80: struct iovec *sg = get_sg(pdu, rx); ! 81: size_t offset = *offsetp; ! 82: int32_t value; ! 83: ! 84: ! 85: copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value)); ! 86: ! 87: BUG_ON(copied != sizeof(value)); ! 88: offset += sizeof(value); ! 89: fprintf(llogfile, "%s=0x%x", name, value); ! 90: *offsetp = offset; ! 91: } ! 92: ! 93: static void pprint_int64(V9fsPDU *pdu, int rx, size_t *offsetp, ! 94: const char *name) ! 95: { ! 96: size_t copied; ! 97: int count = get_sg_count(pdu, rx); ! 98: struct iovec *sg = get_sg(pdu, rx); ! 99: size_t offset = *offsetp; ! 100: int64_t value; ! 101: ! 102: ! 103: copied = do_pdu_unpack(&value, sg, count, offset, sizeof(value)); ! 104: ! 105: BUG_ON(copied != sizeof(value)); ! 106: offset += sizeof(value); ! 107: fprintf(llogfile, "%s=0x%" PRIx64, name, value); ! 108: *offsetp = offset; ! 109: } ! 110: ! 111: static void pprint_str(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 112: { ! 113: int sg_count = get_sg_count(pdu, rx); ! 114: struct iovec *sg = get_sg(pdu, rx); ! 115: size_t offset = *offsetp; ! 116: uint16_t tmp_size, size; ! 117: size_t result; ! 118: size_t copied = 0; ! 119: int i = 0; ! 120: ! 121: /* get the size */ ! 122: copied = do_pdu_unpack(&tmp_size, sg, sg_count, offset, sizeof(tmp_size)); ! 123: BUG_ON(copied != sizeof(tmp_size)); ! 124: size = le16_to_cpupu(&tmp_size); ! 125: offset += copied; ! 126: ! 127: fprintf(llogfile, "%s=", name); ! 128: for (i = 0; size && i < sg_count; i++) { ! 129: size_t len; ! 130: if (offset >= sg[i].iov_len) { ! 131: /* skip this sg */ ! 132: offset -= sg[i].iov_len; ! 133: continue; ! 134: } else { ! 135: len = MIN(sg[i].iov_len - offset, size); ! 136: result = fwrite(sg[i].iov_base + offset, 1, len, llogfile); ! 137: BUG_ON(result != len); ! 138: size -= len; ! 139: copied += len; ! 140: if (size) { ! 141: offset = 0; ! 142: continue; ! 143: } ! 144: } ! 145: } ! 146: *offsetp += copied; ! 147: } ! 148: ! 149: static void pprint_qid(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 150: { ! 151: fprintf(llogfile, "%s={", name); ! 152: pprint_int8(pdu, rx, offsetp, "type"); ! 153: pprint_int32(pdu, rx, offsetp, ", version"); ! 154: pprint_int64(pdu, rx, offsetp, ", path"); ! 155: fprintf(llogfile, "}"); ! 156: } ! 157: ! 158: static void pprint_stat(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 159: { ! 160: fprintf(llogfile, "%s={", name); ! 161: pprint_int16(pdu, rx, offsetp, "size"); ! 162: pprint_int16(pdu, rx, offsetp, ", type"); ! 163: pprint_int32(pdu, rx, offsetp, ", dev"); ! 164: pprint_qid(pdu, rx, offsetp, ", qid"); ! 165: pprint_int32(pdu, rx, offsetp, ", mode"); ! 166: pprint_int32(pdu, rx, offsetp, ", atime"); ! 167: pprint_int32(pdu, rx, offsetp, ", mtime"); ! 168: pprint_int64(pdu, rx, offsetp, ", length"); ! 169: pprint_str(pdu, rx, offsetp, ", name"); ! 170: pprint_str(pdu, rx, offsetp, ", uid"); ! 171: pprint_str(pdu, rx, offsetp, ", gid"); ! 172: pprint_str(pdu, rx, offsetp, ", muid"); ! 173: pprint_str(pdu, rx, offsetp, ", extension"); ! 174: pprint_int32(pdu, rx, offsetp, ", uid"); ! 175: pprint_int32(pdu, rx, offsetp, ", gid"); ! 176: pprint_int32(pdu, rx, offsetp, ", muid"); ! 177: fprintf(llogfile, "}"); ! 178: } ! 179: ! 180: static void pprint_stat_dotl(V9fsPDU *pdu, int rx, size_t *offsetp, ! 181: const char *name) ! 182: { ! 183: fprintf(llogfile, "%s={", name); ! 184: pprint_qid(pdu, rx, offsetp, "qid"); ! 185: pprint_int32(pdu, rx, offsetp, ", st_mode"); ! 186: pprint_int64(pdu, rx, offsetp, ", st_nlink"); ! 187: pprint_int32(pdu, rx, offsetp, ", st_uid"); ! 188: pprint_int32(pdu, rx, offsetp, ", st_gid"); ! 189: pprint_int64(pdu, rx, offsetp, ", st_rdev"); ! 190: pprint_int64(pdu, rx, offsetp, ", st_size"); ! 191: pprint_int64(pdu, rx, offsetp, ", st_blksize"); ! 192: pprint_int64(pdu, rx, offsetp, ", st_blocks"); ! 193: pprint_int64(pdu, rx, offsetp, ", atime"); ! 194: pprint_int64(pdu, rx, offsetp, ", atime_nsec"); ! 195: pprint_int64(pdu, rx, offsetp, ", mtime"); ! 196: pprint_int64(pdu, rx, offsetp, ", mtime_nsec"); ! 197: pprint_int64(pdu, rx, offsetp, ", ctime"); ! 198: pprint_int64(pdu, rx, offsetp, ", ctime_nsec"); ! 199: fprintf(llogfile, "}"); ! 200: } ! 201: ! 202: ! 203: ! 204: static void pprint_strs(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 205: { ! 206: int sg_count = get_sg_count(pdu, rx); ! 207: struct iovec *sg = get_sg(pdu, rx); ! 208: size_t offset = *offsetp; ! 209: uint16_t tmp_count, count, i; ! 210: size_t copied = 0; ! 211: ! 212: fprintf(llogfile, "%s={", name); ! 213: ! 214: /* Get the count */ ! 215: copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count)); ! 216: BUG_ON(copied != sizeof(tmp_count)); ! 217: count = le16_to_cpupu(&tmp_count); ! 218: offset += copied; ! 219: ! 220: for (i = 0; i < count; i++) { ! 221: char str[512]; ! 222: if (i) { ! 223: fprintf(llogfile, ", "); ! 224: } ! 225: snprintf(str, sizeof(str), "[%d]", i); ! 226: pprint_str(pdu, rx, &offset, str); ! 227: } ! 228: ! 229: fprintf(llogfile, "}"); ! 230: ! 231: *offsetp = offset; ! 232: } ! 233: ! 234: static void pprint_qids(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 235: { ! 236: int sg_count = get_sg_count(pdu, rx); ! 237: struct iovec *sg = get_sg(pdu, rx); ! 238: size_t offset = *offsetp; ! 239: uint16_t tmp_count, count, i; ! 240: size_t copied = 0; ! 241: ! 242: fprintf(llogfile, "%s={", name); ! 243: ! 244: copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count)); ! 245: BUG_ON(copied != sizeof(tmp_count)); ! 246: count = le16_to_cpupu(&tmp_count); ! 247: offset += copied; ! 248: ! 249: for (i = 0; i < count; i++) { ! 250: char str[512]; ! 251: if (i) { ! 252: fprintf(llogfile, ", "); ! 253: } ! 254: snprintf(str, sizeof(str), "[%d]", i); ! 255: pprint_qid(pdu, rx, &offset, str); ! 256: } ! 257: ! 258: fprintf(llogfile, "}"); ! 259: ! 260: *offsetp = offset; ! 261: } ! 262: ! 263: static void pprint_sg(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 264: { ! 265: struct iovec *sg = get_sg(pdu, rx); ! 266: unsigned int count; ! 267: int i; ! 268: ! 269: if (rx) { ! 270: count = pdu->elem.in_num; ! 271: } else { ! 272: count = pdu->elem.out_num; ! 273: } ! 274: ! 275: fprintf(llogfile, "%s={", name); ! 276: for (i = 0; i < count; i++) { ! 277: if (i) { ! 278: fprintf(llogfile, ", "); ! 279: } ! 280: fprintf(llogfile, "(%p, 0x%zx)", sg[i].iov_base, sg[i].iov_len); ! 281: } ! 282: fprintf(llogfile, "}"); ! 283: } ! 284: ! 285: /* FIXME: read from a directory fid returns serialized stat_t's */ ! 286: #ifdef DEBUG_DATA ! 287: static void pprint_data(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name) ! 288: { ! 289: struct iovec *sg = get_sg(pdu, rx); ! 290: size_t offset = *offsetp; ! 291: unsigned int count; ! 292: int32_t size; ! 293: int total, i, j; ! 294: ssize_t len; ! 295: ! 296: if (rx) { ! 297: count = pdu->elem.in_num; ! 298: } else ! 299: count = pdu->elem.out_num; ! 300: } ! 301: ! 302: BUG_ON((offset + sizeof(size)) > sg[0].iov_len); ! 303: ! 304: memcpy(&size, sg[0].iov_base + offset, sizeof(size)); ! 305: offset += sizeof(size); ! 306: ! 307: fprintf(llogfile, "size: %x\n", size); ! 308: ! 309: sg[0].iov_base += 11; /* skip header */ ! 310: sg[0].iov_len -= 11; ! 311: ! 312: total = 0; ! 313: for (i = 0; i < count; i++) { ! 314: total += sg[i].iov_len; ! 315: if (total >= size) { ! 316: /* trim sg list so writev does the right thing */ ! 317: sg[i].iov_len -= (total - size); ! 318: i++; ! 319: break; ! 320: } ! 321: } ! 322: ! 323: fprintf(llogfile, "%s={\"", name); ! 324: fflush(llogfile); ! 325: for (j = 0; j < i; j++) { ! 326: if (j) { ! 327: fprintf(llogfile, "\", \""); ! 328: fflush(llogfile); ! 329: } ! 330: ! 331: do { ! 332: len = writev(fileno(llogfile), &sg[j], 1); ! 333: } while (len == -1 && errno == EINTR); ! 334: fprintf(llogfile, "len == %ld: %m\n", len); ! 335: BUG_ON(len != sg[j].iov_len); ! 336: } ! 337: fprintf(llogfile, "\"}"); ! 338: ! 339: sg[0].iov_base -= 11; ! 340: sg[0].iov_len += 11; ! 341: ! 342: } ! 343: #endif ! 344: ! 345: void pprint_pdu(V9fsPDU *pdu) ! 346: { ! 347: size_t offset = 7; ! 348: ! 349: if (llogfile == NULL) { ! 350: llogfile = fopen("/tmp/pdu.log", "w"); ! 351: } ! 352: ! 353: BUG_ON(!llogfile); ! 354: ! 355: switch (pdu->id) { ! 356: case P9_TREADDIR: ! 357: fprintf(llogfile, "TREADDIR: ("); ! 358: pprint_int32(pdu, 0, &offset, "fid"); ! 359: pprint_int64(pdu, 0, &offset, ", initial offset"); ! 360: pprint_int32(pdu, 0, &offset, ", max count"); ! 361: break; ! 362: case P9_RREADDIR: ! 363: fprintf(llogfile, "RREADDIR: ("); ! 364: pprint_int32(pdu, 1, &offset, "count"); ! 365: #ifdef DEBUG_DATA ! 366: pprint_data(pdu, 1, &offset, ", data"); ! 367: #endif ! 368: break; ! 369: case P9_TMKDIR: ! 370: fprintf(llogfile, "TMKDIR: ("); ! 371: pprint_int32(pdu, 0, &offset, "fid"); ! 372: pprint_str(pdu, 0, &offset, "name"); ! 373: pprint_int32(pdu, 0, &offset, "mode"); ! 374: pprint_int32(pdu, 0, &offset, "gid"); ! 375: break; ! 376: case P9_RMKDIR: ! 377: fprintf(llogfile, "RMKDIR: ("); ! 378: pprint_qid(pdu, 0, &offset, "qid"); ! 379: break; ! 380: case P9_TVERSION: ! 381: fprintf(llogfile, "TVERSION: ("); ! 382: pprint_int32(pdu, 0, &offset, "msize"); ! 383: pprint_str(pdu, 0, &offset, ", version"); ! 384: break; ! 385: case P9_RVERSION: ! 386: fprintf(llogfile, "RVERSION: ("); ! 387: pprint_int32(pdu, 1, &offset, "msize"); ! 388: pprint_str(pdu, 1, &offset, ", version"); ! 389: break; ! 390: case P9_TGETATTR: ! 391: fprintf(llogfile, "TGETATTR: ("); ! 392: pprint_int32(pdu, 0, &offset, "fid"); ! 393: break; ! 394: case P9_RGETATTR: ! 395: fprintf(llogfile, "RGETATTR: ("); ! 396: pprint_stat_dotl(pdu, 1, &offset, "getattr"); ! 397: break; ! 398: case P9_TAUTH: ! 399: fprintf(llogfile, "TAUTH: ("); ! 400: pprint_int32(pdu, 0, &offset, "afid"); ! 401: pprint_str(pdu, 0, &offset, ", uname"); ! 402: pprint_str(pdu, 0, &offset, ", aname"); ! 403: pprint_int32(pdu, 0, &offset, ", n_uname"); ! 404: break; ! 405: case P9_RAUTH: ! 406: fprintf(llogfile, "RAUTH: ("); ! 407: pprint_qid(pdu, 1, &offset, "qid"); ! 408: break; ! 409: case P9_TATTACH: ! 410: fprintf(llogfile, "TATTACH: ("); ! 411: pprint_int32(pdu, 0, &offset, "fid"); ! 412: pprint_int32(pdu, 0, &offset, ", afid"); ! 413: pprint_str(pdu, 0, &offset, ", uname"); ! 414: pprint_str(pdu, 0, &offset, ", aname"); ! 415: pprint_int32(pdu, 0, &offset, ", n_uname"); ! 416: break; ! 417: case P9_RATTACH: ! 418: fprintf(llogfile, "RATTACH: ("); ! 419: pprint_qid(pdu, 1, &offset, "qid"); ! 420: break; ! 421: case P9_TERROR: ! 422: fprintf(llogfile, "TERROR: ("); ! 423: break; ! 424: case P9_RERROR: ! 425: fprintf(llogfile, "RERROR: ("); ! 426: pprint_str(pdu, 1, &offset, "ename"); ! 427: pprint_int32(pdu, 1, &offset, ", ecode"); ! 428: break; ! 429: case P9_TFLUSH: ! 430: fprintf(llogfile, "TFLUSH: ("); ! 431: pprint_int16(pdu, 0, &offset, "oldtag"); ! 432: break; ! 433: case P9_RFLUSH: ! 434: fprintf(llogfile, "RFLUSH: ("); ! 435: break; ! 436: case P9_TWALK: ! 437: fprintf(llogfile, "TWALK: ("); ! 438: pprint_int32(pdu, 0, &offset, "fid"); ! 439: pprint_int32(pdu, 0, &offset, ", newfid"); ! 440: pprint_strs(pdu, 0, &offset, ", wnames"); ! 441: break; ! 442: case P9_RWALK: ! 443: fprintf(llogfile, "RWALK: ("); ! 444: pprint_qids(pdu, 1, &offset, "wqids"); ! 445: break; ! 446: case P9_TOPEN: ! 447: fprintf(llogfile, "TOPEN: ("); ! 448: pprint_int32(pdu, 0, &offset, "fid"); ! 449: pprint_int8(pdu, 0, &offset, ", mode"); ! 450: break; ! 451: case P9_ROPEN: ! 452: fprintf(llogfile, "ROPEN: ("); ! 453: pprint_qid(pdu, 1, &offset, "qid"); ! 454: pprint_int32(pdu, 1, &offset, ", iounit"); ! 455: break; ! 456: case P9_TCREATE: ! 457: fprintf(llogfile, "TCREATE: ("); ! 458: pprint_int32(pdu, 0, &offset, "fid"); ! 459: pprint_str(pdu, 0, &offset, ", name"); ! 460: pprint_int32(pdu, 0, &offset, ", perm"); ! 461: pprint_int8(pdu, 0, &offset, ", mode"); ! 462: pprint_str(pdu, 0, &offset, ", extension"); ! 463: break; ! 464: case P9_RCREATE: ! 465: fprintf(llogfile, "RCREATE: ("); ! 466: pprint_qid(pdu, 1, &offset, "qid"); ! 467: pprint_int32(pdu, 1, &offset, ", iounit"); ! 468: break; ! 469: case P9_TSYMLINK: ! 470: fprintf(llogfile, "TSYMLINK: ("); ! 471: pprint_int32(pdu, 0, &offset, "fid"); ! 472: pprint_str(pdu, 0, &offset, ", name"); ! 473: pprint_str(pdu, 0, &offset, ", symname"); ! 474: pprint_int32(pdu, 0, &offset, ", gid"); ! 475: break; ! 476: case P9_RSYMLINK: ! 477: fprintf(llogfile, "RSYMLINK: ("); ! 478: pprint_qid(pdu, 1, &offset, "qid"); ! 479: break; ! 480: case P9_TLCREATE: ! 481: fprintf(llogfile, "TLCREATE: ("); ! 482: pprint_int32(pdu, 0, &offset, "dfid"); ! 483: pprint_str(pdu, 0, &offset, ", name"); ! 484: pprint_int32(pdu, 0, &offset, ", flags"); ! 485: pprint_int32(pdu, 0, &offset, ", mode"); ! 486: pprint_int32(pdu, 0, &offset, ", gid"); ! 487: break; ! 488: case P9_RLCREATE: ! 489: fprintf(llogfile, "RLCREATE: ("); ! 490: pprint_qid(pdu, 1, &offset, "qid"); ! 491: pprint_int32(pdu, 1, &offset, ", iounit"); ! 492: break; ! 493: case P9_TMKNOD: ! 494: fprintf(llogfile, "TMKNOD: ("); ! 495: pprint_int32(pdu, 0, &offset, "fid"); ! 496: pprint_str(pdu, 0, &offset, "name"); ! 497: pprint_int32(pdu, 0, &offset, "mode"); ! 498: pprint_int32(pdu, 0, &offset, "major"); ! 499: pprint_int32(pdu, 0, &offset, "minor"); ! 500: pprint_int32(pdu, 0, &offset, "gid"); ! 501: break; ! 502: case P9_RMKNOD: ! 503: fprintf(llogfile, "RMKNOD: )"); ! 504: pprint_qid(pdu, 0, &offset, "qid"); ! 505: break; ! 506: case P9_TREADLINK: ! 507: fprintf(llogfile, "TREADLINK: ("); ! 508: pprint_int32(pdu, 0, &offset, "fid"); ! 509: break; ! 510: case P9_RREADLINK: ! 511: fprintf(llogfile, "RREADLINK: ("); ! 512: pprint_str(pdu, 0, &offset, "target"); ! 513: break; ! 514: case P9_TREAD: ! 515: fprintf(llogfile, "TREAD: ("); ! 516: pprint_int32(pdu, 0, &offset, "fid"); ! 517: pprint_int64(pdu, 0, &offset, ", offset"); ! 518: pprint_int32(pdu, 0, &offset, ", count"); ! 519: pprint_sg(pdu, 0, &offset, ", sg"); ! 520: break; ! 521: case P9_RREAD: ! 522: fprintf(llogfile, "RREAD: ("); ! 523: pprint_int32(pdu, 1, &offset, "count"); ! 524: pprint_sg(pdu, 1, &offset, ", sg"); ! 525: offset = 7; ! 526: #ifdef DEBUG_DATA ! 527: pprint_data(pdu, 1, &offset, ", data"); ! 528: #endif ! 529: break; ! 530: case P9_TWRITE: ! 531: fprintf(llogfile, "TWRITE: ("); ! 532: pprint_int32(pdu, 0, &offset, "fid"); ! 533: pprint_int64(pdu, 0, &offset, ", offset"); ! 534: pprint_int32(pdu, 0, &offset, ", count"); ! 535: break; ! 536: case P9_RWRITE: ! 537: fprintf(llogfile, "RWRITE: ("); ! 538: pprint_int32(pdu, 1, &offset, "count"); ! 539: break; ! 540: case P9_TCLUNK: ! 541: fprintf(llogfile, "TCLUNK: ("); ! 542: pprint_int32(pdu, 0, &offset, "fid"); ! 543: break; ! 544: case P9_RCLUNK: ! 545: fprintf(llogfile, "RCLUNK: ("); ! 546: break; ! 547: case P9_TFSYNC: ! 548: fprintf(llogfile, "TFSYNC: ("); ! 549: pprint_int32(pdu, 0, &offset, "fid"); ! 550: break; ! 551: case P9_RFSYNC: ! 552: fprintf(llogfile, "RFSYNC: ("); ! 553: break; ! 554: case P9_TLINK: ! 555: fprintf(llogfile, "TLINK: ("); ! 556: pprint_int32(pdu, 0, &offset, "dfid"); ! 557: pprint_int32(pdu, 0, &offset, ", fid"); ! 558: pprint_str(pdu, 0, &offset, ", newpath"); ! 559: break; ! 560: case P9_RLINK: ! 561: fprintf(llogfile, "RLINK: ("); ! 562: break; ! 563: case P9_TREMOVE: ! 564: fprintf(llogfile, "TREMOVE: ("); ! 565: pprint_int32(pdu, 0, &offset, "fid"); ! 566: break; ! 567: case P9_RREMOVE: ! 568: fprintf(llogfile, "RREMOVE: ("); ! 569: break; ! 570: case P9_TSTAT: ! 571: fprintf(llogfile, "TSTAT: ("); ! 572: pprint_int32(pdu, 0, &offset, "fid"); ! 573: break; ! 574: case P9_RSTAT: ! 575: fprintf(llogfile, "RSTAT: ("); ! 576: offset += 2; /* ignored */ ! 577: pprint_stat(pdu, 1, &offset, "stat"); ! 578: break; ! 579: case P9_TWSTAT: ! 580: fprintf(llogfile, "TWSTAT: ("); ! 581: pprint_int32(pdu, 0, &offset, "fid"); ! 582: offset += 2; /* ignored */ ! 583: pprint_stat(pdu, 0, &offset, ", stat"); ! 584: break; ! 585: case P9_RWSTAT: ! 586: fprintf(llogfile, "RWSTAT: ("); ! 587: break; ! 588: case P9_TXATTRWALK: ! 589: fprintf(llogfile, "TXATTRWALK: ("); ! 590: pprint_int32(pdu, 0, &offset, "fid"); ! 591: pprint_int32(pdu, 0, &offset, ", newfid"); ! 592: pprint_str(pdu, 0, &offset, ", xattr name"); ! 593: break; ! 594: case P9_RXATTRWALK: ! 595: fprintf(llogfile, "RXATTRWALK: ("); ! 596: pprint_int64(pdu, 1, &offset, "xattrsize"); ! 597: case P9_TXATTRCREATE: ! 598: fprintf(llogfile, "TXATTRCREATE: ("); ! 599: pprint_int32(pdu, 0, &offset, "fid"); ! 600: pprint_str(pdu, 0, &offset, ", name"); ! 601: pprint_int64(pdu, 0, &offset, ", xattrsize"); ! 602: pprint_int32(pdu, 0, &offset, ", flags"); ! 603: break; ! 604: case P9_RXATTRCREATE: ! 605: fprintf(llogfile, "RXATTRCREATE: ("); ! 606: break; ! 607: case P9_TLOCK: ! 608: fprintf(llogfile, "TLOCK: ("); ! 609: pprint_int32(pdu, 0, &offset, "fid"); ! 610: pprint_int8(pdu, 0, &offset, ", type"); ! 611: pprint_int32(pdu, 0, &offset, ", flags"); ! 612: pprint_int64(pdu, 0, &offset, ", start"); ! 613: pprint_int64(pdu, 0, &offset, ", length"); ! 614: pprint_int32(pdu, 0, &offset, ", proc_id"); ! 615: pprint_str(pdu, 0, &offset, ", client_id"); ! 616: break; ! 617: case P9_RLOCK: ! 618: fprintf(llogfile, "RLOCK: ("); ! 619: pprint_int8(pdu, 0, &offset, "status"); ! 620: break; ! 621: case P9_TGETLOCK: ! 622: fprintf(llogfile, "TGETLOCK: ("); ! 623: pprint_int32(pdu, 0, &offset, "fid"); ! 624: pprint_int8(pdu, 0, &offset, ", type"); ! 625: pprint_int64(pdu, 0, &offset, ", start"); ! 626: pprint_int64(pdu, 0, &offset, ", length"); ! 627: pprint_int32(pdu, 0, &offset, ", proc_id"); ! 628: pprint_str(pdu, 0, &offset, ", client_id"); ! 629: break; ! 630: case P9_RGETLOCK: ! 631: fprintf(llogfile, "RGETLOCK: ("); ! 632: pprint_int8(pdu, 0, &offset, "type"); ! 633: pprint_int64(pdu, 0, &offset, ", start"); ! 634: pprint_int64(pdu, 0, &offset, ", length"); ! 635: pprint_int32(pdu, 0, &offset, ", proc_id"); ! 636: pprint_str(pdu, 0, &offset, ", client_id"); ! 637: break; ! 638: default: ! 639: fprintf(llogfile, "unknown(%d): (", pdu->id); ! 640: break; ! 641: } ! 642: ! 643: fprintf(llogfile, ")\n"); ! 644: /* Flush the log message out */ ! 645: fflush(llogfile); ! 646: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.