Annotation of qemu/hw/9pfs/virtio-9p-debug.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.