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