[BACK]Return to opdump.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libpuffs

Annotation of src/lib/libpuffs/opdump.c, Revision 1.30

1.30    ! pooka       1: /*     $NetBSD: opdump.c,v 1.29 2010/01/07 20:47:47 pooka Exp $        */
1.1       pooka       2:
                      3: /*
                      4:  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.
                      5:  *
                      6:  * Development of this software was supported by the
                      7:  * Google Summer of Code program and the Ulla Tuominen Foundation.
                      8:  * The Google SoC project was mentored by Bill Studenmund.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
                     20:  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     21:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     22:  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     25:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     29:  * SUCH DAMAGE.
                     30:  */
                     31:
                     32: /* Pretty-printing helper routines for VFS/VOP request contents */
                     33:
1.11      pooka      34: /* yes, this is pretty much a mess */
                     35:
1.1       pooka      36: #include <sys/cdefs.h>
                     37: #if !defined(lint)
1.30    ! pooka      38: __RCSID("$NetBSD: opdump.c,v 1.29 2010/01/07 20:47:47 pooka Exp $");
1.1       pooka      39: #endif /* !lint */
                     40:
1.11      pooka      41: #include <sys/types.h>
                     42: #include <sys/time.h>
                     43:
1.1       pooka      44: #include <puffs.h>
                     45: #include <puffsdump.h>
                     46: #include <stdio.h>
                     47:
1.17      pooka      48: #include "puffs_priv.h"
                     49:
1.28      pooka      50: #define DINT "    "
                     51:
1.1       pooka      52: /* XXX! */
1.4       pooka      53: const char *vfsop_revmap[] = {
                     54:        "PUFFS_VFS_MOUNT",
                     55:        "PUFFS_VFS_START",
                     56:        "PUFFS_VFS_UNMOUNT",
                     57:        "PUFFS_VFS_ROOT",
                     58:        "PUFFS_VFS_STATVFS",
                     59:        "PUFFS_VFS_SYNC",
                     60:        "PUFFS_VFS_VGET",
                     61:        "PUFFS_VFS_FHTOVP",
                     62:        "PUFFS_VFS_VPTOFH",
                     63:        "PUFFS_VFS_INIT",
                     64:        "PUFFS_VFS_DONE",
                     65:        "PUFFS_VFS_SNAPSHOT",
1.7       pooka      66:        "PUFFS_VFS_EXTATTCTL",
                     67:        "PUFFS_VFS_SUSPEND"
1.4       pooka      68: };
                     69: /* XXX! */
1.1       pooka      70: const char *vnop_revmap[] = {
1.4       pooka      71:        "PUFFS_VN_LOOKUP",
                     72:        "PUFFS_VN_CREATE",
                     73:        "PUFFS_VN_MKNOD",
                     74:        "PUFFS_VN_OPEN",
                     75:        "PUFFS_VN_CLOSE",
                     76:        "PUFFS_VN_ACCESS",
                     77:        "PUFFS_VN_GETATTR",
                     78:        "PUFFS_VN_SETATTR",
                     79:        "PUFFS_VN_READ",
                     80:        "PUFFS_VN_WRITE",
                     81:        "PUFFS_VN_IOCTL",
                     82:        "PUFFS_VN_FCNTL",
                     83:        "PUFFS_VN_POLL",
                     84:        "PUFFS_VN_KQFILTER",
                     85:        "PUFFS_VN_REVOKE",
                     86:        "PUFFS_VN_MMAP",
                     87:        "PUFFS_VN_FSYNC",
                     88:        "PUFFS_VN_SEEK",
                     89:        "PUFFS_VN_REMOVE",
                     90:        "PUFFS_VN_LINK",
                     91:        "PUFFS_VN_RENAME",
                     92:        "PUFFS_VN_MKDIR",
                     93:        "PUFFS_VN_RMDIR",
                     94:        "PUFFS_VN_SYMLINK",
                     95:        "PUFFS_VN_READDIR",
                     96:        "PUFFS_VN_READLINK",
                     97:        "PUFFS_VN_ABORTOP",
                     98:        "PUFFS_VN_INACTIVE",
                     99:        "PUFFS_VN_RECLAIM",
                    100:        "PUFFS_VN_LOCK",
                    101:        "PUFFS_VN_UNLOCK",
                    102:        "PUFFS_VN_BMAP",
                    103:        "PUFFS_VN_STRATEGY",
                    104:        "PUFFS_VN_PRINT",
                    105:        "PUFFS_VN_ISLOCKED",
                    106:        "PUFFS_VN_PATHCONF",
                    107:        "PUFFS_VN_ADVLOCK",
                    108:        "PUFFS_VN_LEASE",
                    109:        "PUFFS_VN_WHITEOUT",
                    110:        "PUFFS_VN_GETPAGES",
                    111:        "PUFFS_VN_PUTPAGES",
                    112:        "PUFFS_VN_BWRITE",
                    113:        "PUFFS_VN_GETEXTATTR",
                    114:        "PUFFS_VN_LISTEXTATTR",
                    115:        "PUFFS_VN_OPENEXTATTR",
                    116:        "PUFFS_VN_DELETEEXTATTR",
                    117:        "PUFFS_VN_SETEXTATTR",
1.1       pooka     118: };
1.14      pooka     119: /* XXX! */
1.9       pooka     120: const char *cacheop_revmap[] = {
                    121:        "PUFFS_CACHE_WRITE"
                    122: };
1.14      pooka     123: /* XXX! */
                    124: const char *errnot_revmap[] = {
                    125:        "PUFFS_ERR_MAKENODE",
                    126:        "PUFFS_ERR_LOOKUP",
                    127:        "PUFFS_ERR_READDIR",
                    128:        "PUFFS_ERR_READLINK",
                    129:        "PUFFS_ERR_READ",
                    130:        "PUFFS_ERR_WRITE",
                    131:        "PUFFS_ERR_VPTOFH"
                    132: };
1.20      pooka     133: /* XXX! */
                    134: const char *flush_revmap[] = {
                    135:        "PUFFS_INVAL_NAMECACHE_NODE",
                    136:        "PUFFS_INVAL_NAMECACHE_DIR",
                    137:        "PUFFS_INVAL_NAMECACHE_ALL",
                    138:        "PUFFS_INVAL_PAGECACHE_NODE_RANGE",
                    139:        "PUFFS_FLUSH_PAGECACHE_NODE_RANGE",
                    140: };
1.1       pooka     141:
                    142: void
                    143: puffsdump_req(struct puffs_req *preq)
                    144: {
1.11      pooka     145:        static struct timeval tv_prev;
                    146:        struct timeval tv_now, tv;
1.4       pooka     147:        const char **map;
1.12      pooka     148:        int isvn = 0;
1.1       pooka     149:
1.30    ! pooka     150:        printf("reqid: %" PRIu64 ", ", preq->preq_id);
1.9       pooka     151:        switch (PUFFSOP_OPCLASS(preq->preq_opclass)) {
                    152:        case PUFFSOP_VFS:
                    153:                map = vfsop_revmap;
                    154:                break;
                    155:        case PUFFSOP_VN:
                    156:                map = vnop_revmap;
1.12      pooka     157:                isvn = 1;
1.9       pooka     158:                break;
                    159:        case PUFFSOP_CACHE:
                    160:                map = cacheop_revmap;
                    161:                break;
1.14      pooka     162:        case PUFFSOP_ERROR:
                    163:                map = errnot_revmap;
                    164:                break;
1.20      pooka     165:        case PUFFSOP_FLUSH:
                    166:                map = flush_revmap;
                    167:                break;
1.30    ! pooka     168:        default:
        !           169:                printf("unhandled opclass\n");
        !           170:                return;
1.9       pooka     171:        }
1.11      pooka     172:
1.30    ! pooka     173:        printf("opclass %d%s, optype: %s, "
1.28      pooka     174:            "cookie: %p,\n" DINT "aux: %p, auxlen: %zu, pid: %d, lwpid: %d\n",
1.30    ! pooka     175:            PUFFSOP_OPCLASS(preq->preq_opclass),
1.5       pooka     176:            PUFFSOP_WANTREPLY(preq->preq_opclass) ? "" : " (FAF)",
                    177:            map[preq->preq_optype], preq->preq_cookie,
1.16      pooka     178:            preq->preq_buf, preq->preq_buflen,
                    179:            preq->preq_pid, preq->preq_lid);
1.12      pooka     180:
                    181:        if (isvn) {
                    182:                switch (preq->preq_optype) {
1.13      pooka     183:                case PUFFS_VN_LOOKUP:
                    184:                        puffsdump_lookup(preq);
                    185:                        break;
1.12      pooka     186:                case PUFFS_VN_READ:
                    187:                case PUFFS_VN_WRITE:
                    188:                        puffsdump_readwrite(preq);
                    189:                        break;
1.19      pooka     190:                case PUFFS_VN_OPEN:
                    191:                        puffsdump_open(preq);
                    192:                        break;
1.23      pooka     193:                case PUFFS_VN_REMOVE:
                    194:                case PUFFS_VN_RMDIR:
                    195:                case PUFFS_VN_LINK:
                    196:                        puffsdump_targ(preq);
                    197:                        break;
1.27      pooka     198:                case PUFFS_VN_READDIR:
                    199:                        puffsdump_readdir(preq);
                    200:                        break;
1.29      pooka     201:                case PUFFS_VN_CREATE:
                    202:                case PUFFS_VN_MKDIR:
                    203:                case PUFFS_VN_MKNOD:
                    204:                case PUFFS_VN_SYMLINK:
                    205:                        puffsdump_create(preq);
                    206:                        break;
                    207:                case PUFFS_VN_SETATTR:
                    208:                        puffsdump_attr(preq);
                    209:                        break;
1.12      pooka     210:                default:
                    211:                        break;
                    212:                }
                    213:        }
1.29      pooka     214:
1.17      pooka     215:        PU_LOCK();
1.11      pooka     216:        gettimeofday(&tv_now, NULL);
                    217:        timersub(&tv_now, &tv_prev, &tv);
1.28      pooka     218:        printf(DINT "since previous call: %lld.%06ld\n",
1.25      christos  219:            (long long)tv.tv_sec, (long)tv.tv_usec);
1.11      pooka     220:        gettimeofday(&tv_prev, NULL);
1.17      pooka     221:        PU_UNLOCK();
1.1       pooka     222: }
                    223:
                    224: void
1.8       pooka     225: puffsdump_rv(struct puffs_req *preq)
                    226: {
                    227:
1.13      pooka     228:        if (PUFFSOP_OPCLASS(preq->preq_opclass) == PUFFSOP_VN) {
                    229:                switch (preq->preq_optype) {
                    230:                case PUFFS_VN_LOOKUP:
                    231:                        puffsdump_lookup_rv(preq);
                    232:                        break;
1.21      pooka     233:                case PUFFS_VN_CREATE:
                    234:                case PUFFS_VN_MKDIR:
                    235:                case PUFFS_VN_MKNOD:
                    236:                case PUFFS_VN_SYMLINK:
                    237:                        puffsdump_create_rv(preq);
                    238:                        break;
1.22      pooka     239:                case PUFFS_VN_READ:
                    240:                case PUFFS_VN_WRITE:
                    241:                        puffsdump_readwrite_rv(preq);
                    242:                        break;
1.26      pooka     243:                case PUFFS_VN_READDIR:
                    244:                        puffsdump_readdir_rv(preq);
                    245:                        break;
1.29      pooka     246:                case PUFFS_VN_GETATTR:
                    247:                        puffsdump_attr(preq);
                    248:                        break;
1.13      pooka     249:                default:
                    250:                        break;
                    251:                }
                    252:        }
1.26      pooka     253:
1.28      pooka     254:        printf("RV reqid: %" PRIu64 ", result: %d %s\n",
1.26      pooka     255:            preq->preq_id, preq->preq_rv,
                    256:            preq->preq_rv ? strerror(preq->preq_rv) : "");
1.8       pooka     257: }
                    258:
1.29      pooka     259: /*
                    260:  * Slightly tedious print-routine so that we get a nice NOVAL instead
                    261:  * of some tedious output representations for -1, especially (uint64_t)-1
                    262:  *
                    263:  * We use typecasting to make this work beyond time_t/dev_t size changes.
                    264:  */
                    265: static void
                    266: dumpattr(struct vattr *vap)
                    267: {
                    268:        const char * const vtypes[] = { VNODE_TYPES };
                    269:        char buf[128];
                    270:
                    271: /* XXX: better readability.  and this is debug, so no cycle-sweat */
                    272: #define DEFAULTBUF() snprintf(buf, sizeof(buf), "NOVAL")
                    273:
                    274:        printf(DINT "vattr:\n");
                    275:        printf(DINT DINT "type: %s, ", vtypes[vap->va_type]);
                    276:
                    277:        DEFAULTBUF();
                    278:        if (vap->va_mode != (mode_t)PUFFS_VNOVAL)
                    279:                snprintf(buf, sizeof(buf), "0%o", vap->va_mode);
                    280:        printf("mode: %s, ", buf);
                    281:
                    282:        DEFAULTBUF();
                    283:        if (vap->va_nlink != (nlink_t)PUFFS_VNOVAL)
                    284:                snprintf(buf, sizeof(buf), "%d", vap->va_nlink);
                    285:        printf("nlink: %s, ", buf);
                    286:
                    287:        DEFAULTBUF();
                    288:        if (vap->va_uid != (uid_t)PUFFS_VNOVAL)
                    289:                snprintf(buf, sizeof(buf), "%d", vap->va_uid);
                    290:        printf("uid: %s, ", buf);
                    291:
                    292:        DEFAULTBUF();
                    293:        if (vap->va_gid != (gid_t)PUFFS_VNOVAL)
                    294:                snprintf(buf, sizeof(buf), "%d", vap->va_gid);
                    295:        printf("gid: %s\n", buf);
                    296:
                    297:        DEFAULTBUF();
                    298:        if (vap->va_fsid != (dev_t)PUFFS_VNOVAL)
                    299:                snprintf(buf, sizeof(buf), "0x%llx",
                    300:                    (unsigned long long)vap->va_fsid);
                    301:        printf(DINT DINT "fsid: %s, ", buf);
                    302:
                    303:        DEFAULTBUF();
                    304:        if (vap->va_fileid != (ino_t)PUFFS_VNOVAL)
                    305:                snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_fileid);
                    306:        printf("ino: %s, ", buf);
                    307:
                    308:        DEFAULTBUF();
                    309:        if (vap->va_size != (u_quad_t)PUFFS_VNOVAL)
                    310:                snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_size);
                    311:        printf("size: %s, ", buf);
                    312:
                    313:        DEFAULTBUF();
                    314:        if (vap->va_blocksize != (long)PUFFS_VNOVAL)
                    315:                snprintf(buf, sizeof(buf), "%ld", vap->va_blocksize);
                    316:        printf("bsize: %s\n", buf);
                    317:
                    318:        DEFAULTBUF();
                    319:        if (vap->va_atime.tv_sec != (time_t)PUFFS_VNOVAL)
                    320:                snprintf(buf, sizeof(buf), "%lld",
                    321:                    (long long)vap->va_atime.tv_sec);
                    322:        printf(DINT DINT "a.s: %s, ", buf);
                    323:
                    324:        DEFAULTBUF();
                    325:        if (vap->va_atime.tv_nsec != (long)PUFFS_VNOVAL)
                    326:                snprintf(buf, sizeof(buf), "%ld", vap->va_atime.tv_nsec);
                    327:        printf("a.ns: %s, ", buf);
                    328:
                    329:        DEFAULTBUF();
                    330:        if (vap->va_mtime.tv_sec != (time_t)PUFFS_VNOVAL)
                    331:                snprintf(buf, sizeof(buf), "%lld",
                    332:                    (long long)vap->va_mtime.tv_sec);
                    333:        printf("m.s: %s, ", buf);
                    334:
                    335:        DEFAULTBUF();
                    336:        if (vap->va_mtime.tv_nsec != (long)PUFFS_VNOVAL)
                    337:                snprintf(buf, sizeof(buf), "%ld", vap->va_mtime.tv_nsec);
                    338:        printf("m.ns: %s\n", buf);
                    339:
                    340:        DEFAULTBUF();
                    341:        if (vap->va_ctime.tv_sec != (time_t)PUFFS_VNOVAL)
                    342:                snprintf(buf, sizeof(buf), "%lld",
                    343:                    (long long)vap->va_ctime.tv_sec);
                    344:        printf(DINT DINT "c.s: %s, ", buf);
                    345:
                    346:        DEFAULTBUF();
                    347:        if (vap->va_ctime.tv_nsec != (long)PUFFS_VNOVAL)
                    348:                snprintf(buf, sizeof(buf), "%ld", vap->va_ctime.tv_nsec);
                    349:        printf("c.ns: %s, ", buf);
                    350:
                    351:        DEFAULTBUF();
                    352:        if (vap->va_birthtime.tv_sec != (time_t)PUFFS_VNOVAL)
                    353:                snprintf(buf, sizeof(buf), "%lld",
                    354:                    (long long)vap->va_birthtime.tv_sec);
                    355:        printf("b.s: %s, ", buf);
                    356:
                    357:        DEFAULTBUF();
                    358:        if (vap->va_birthtime.tv_nsec != (long)PUFFS_VNOVAL)
                    359:                snprintf(buf, sizeof(buf), "%ld", vap->va_birthtime.tv_nsec);
                    360:        printf("b.ns: %s\n", buf);
                    361:
                    362:        DEFAULTBUF();
                    363:        if (vap->va_gen != (u_long)PUFFS_VNOVAL)
                    364:                snprintf(buf, sizeof(buf), "%lu", vap->va_gen);
                    365:        printf(DINT DINT "gen: %s, ", buf);
                    366:
                    367:        DEFAULTBUF();
                    368:        if (vap->va_flags != (u_long)PUFFS_VNOVAL)
                    369:                snprintf(buf, sizeof(buf), "0x%lx", vap->va_flags);
                    370:        printf("flags: %s, ", buf);
                    371:
                    372:        DEFAULTBUF();
                    373:        if (vap->va_rdev != (dev_t)PUFFS_VNOVAL)
                    374:                snprintf(buf, sizeof(buf), "0x%llx",
                    375:                    (unsigned long long)vap->va_rdev);
                    376:        printf("rdev: %s\n", buf);
                    377:
                    378:        DEFAULTBUF();
                    379:        if (vap->va_bytes != (u_quad_t)PUFFS_VNOVAL)
                    380:                snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_bytes);
                    381:        printf(DINT DINT "bytes: %s, ", buf);
                    382:
                    383:        snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_filerev);
                    384:        printf("filerev: %s, ", buf);
                    385:
                    386:        snprintf(buf, sizeof(buf), "0x%x", vap->va_vaflags);
                    387:        printf("vaflags: %s\n", buf);
                    388: }
                    389:
1.8       pooka     390: void
1.24      pooka     391: puffsdump_cookie(puffs_cookie_t c, const char *cookiename)
1.1       pooka     392: {
                    393:
1.28      pooka     394:        printf("%scookie: at %p\n", cookiename, c);
1.1       pooka     395: }
                    396:
                    397: static const char *cn_opnames[] = {
                    398:        "LOOKUP",
                    399:        "CREATE",
                    400:        "DELETE",
                    401:        "RENAME"
                    402: };
1.13      pooka     403:
1.1       pooka     404: void
1.13      pooka     405: puffsdump_cn(struct puffs_kcn *pkcn)
1.1       pooka     406: {
                    407:
1.28      pooka     408:        printf(DINT "puffs_cn: \"%s\", len %zu op %s (flags 0x%x)\n",
1.13      pooka     409:            pkcn->pkcn_name, pkcn->pkcn_namelen,
                    410:            cn_opnames[pkcn->pkcn_nameiop & NAMEI_OPMASK],
                    411:            pkcn->pkcn_flags);
                    412: }
                    413:
                    414: void
                    415: puffsdump_lookup(struct puffs_req *preq)
                    416: {
1.15      pooka     417:        struct puffs_vnmsg_lookup *lookup_msg = (void *)preq;
1.13      pooka     418:
1.15      pooka     419:        puffsdump_cn(&lookup_msg->pvnr_cn);
1.13      pooka     420: }
                    421:
                    422: void
                    423: puffsdump_lookup_rv(struct puffs_req *preq)
                    424: {
1.15      pooka     425:        struct puffs_vnmsg_lookup *lookup_msg = (void *)preq;
1.13      pooka     426:
1.28      pooka     427:        printf(DINT "new %p, type 0x%x, size 0x%"PRIu64", dev 0x%llx\n",
1.15      pooka     428:            lookup_msg->pvnr_newnode, lookup_msg->pvnr_vtype,
1.25      christos  429:            lookup_msg->pvnr_size, (unsigned long long)lookup_msg->pvnr_rdev);
1.1       pooka     430: }
                    431:
                    432: void
1.29      pooka     433: puffsdump_create(struct puffs_req *preq)
                    434: {
                    435:        /* XXX: wrong type, but we know it fits the slot */
                    436:        struct puffs_vnmsg_create *create_msg = (void *)preq;
                    437:
                    438:        dumpattr(&create_msg->pvnr_va);
                    439: }
                    440:
                    441: void
1.21      pooka     442: puffsdump_create_rv(struct puffs_req *preq)
                    443: {
                    444:        /* XXX: wrong type, but we know it fits the slot */
                    445:        struct puffs_vnmsg_create *create_msg = (void *)preq;
                    446:
1.28      pooka     447:        printf(DINT "new %p\n", create_msg->pvnr_newnode);
1.21      pooka     448: }
                    449:
                    450: void
1.12      pooka     451: puffsdump_readwrite(struct puffs_req *preq)
                    452: {
1.15      pooka     453:        struct puffs_vnmsg_rw *rw_msg = (void *)preq;
1.12      pooka     454:
1.28      pooka     455:        printf(DINT "offset: %" PRId64 ", resid %zu, ioflag 0x%x\n",
1.15      pooka     456:            rw_msg->pvnr_offset, rw_msg->pvnr_resid, rw_msg->pvnr_ioflag);
1.12      pooka     457: }
                    458:
                    459: void
1.22      pooka     460: puffsdump_readwrite_rv(struct puffs_req *preq)
                    461: {
                    462:        struct puffs_vnmsg_rw *rw_msg = (void *)preq;
                    463:
1.28      pooka     464:        printf(DINT "resid after op: %zu\n", rw_msg->pvnr_resid);
1.22      pooka     465: }
                    466:
                    467: void
1.26      pooka     468: puffsdump_readdir_rv(struct puffs_req *preq)
                    469: {
                    470:        struct puffs_vnmsg_readdir *readdir_msg = (void *)preq;
                    471:
1.28      pooka     472:        printf(DINT "resid after op: %zu, eofflag %d\n",
1.26      pooka     473:            readdir_msg->pvnr_resid, readdir_msg->pvnr_eofflag);
                    474: }
                    475:
                    476: void
1.19      pooka     477: puffsdump_open(struct puffs_req *preq)
                    478: {
                    479:        struct puffs_vnmsg_open *open_msg = (void *)preq;
                    480:
1.28      pooka     481:        printf(DINT "mode: 0x%x\n", open_msg->pvnr_mode);
1.19      pooka     482: }
                    483:
                    484: void
1.23      pooka     485: puffsdump_targ(struct puffs_req *preq)
                    486: {
                    487:        struct puffs_vnmsg_remove *remove_msg = (void *)preq; /* XXX! */
                    488:
1.28      pooka     489:        printf(DINT "target cookie: %p\n", remove_msg->pvnr_cookie_targ);
1.23      pooka     490: }
                    491:
                    492: void
1.27      pooka     493: puffsdump_readdir(struct puffs_req *preq)
                    494: {
                    495:        struct puffs_vnmsg_readdir *readdir_msg = (void *)preq;
                    496:
1.28      pooka     497:        printf(DINT "read offset: %" PRId64 "\n", readdir_msg->pvnr_offset);
1.1       pooka     498: }
1.29      pooka     499:
                    500: void
                    501: puffsdump_attr(struct puffs_req *preq)
                    502: {
                    503:        struct puffs_vnmsg_setgetattr *attr_msg = (void *)preq;
                    504:
                    505:        dumpattr(&attr_msg->pvnr_va);
                    506: }

CVSweb <webmaster@jp.NetBSD.org>