Module Name:    src
Committed By:   pooka
Date:           Thu Jan  7 20:47:48 UTC 2010

Modified Files:
        src/lib/libpuffs: opdump.c puffsdump.h

Log Message:
Dump contents of struct vattr -- i never remember which members
the kernel passes when, so this helps tapping that info.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/lib/libpuffs/opdump.c
cvs rdiff -u -r1.13 -r1.14 src/lib/libpuffs/puffsdump.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libpuffs/opdump.c
diff -u src/lib/libpuffs/opdump.c:1.28 src/lib/libpuffs/opdump.c:1.29
--- src/lib/libpuffs/opdump.c:1.28	Thu Jan  7 18:09:07 2010
+++ src/lib/libpuffs/opdump.c	Thu Jan  7 20:47:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: opdump.c,v 1.28 2010/01/07 18:09:07 pooka Exp $	*/
+/*	$NetBSD: opdump.c,v 1.29 2010/01/07 20:47:47 pooka Exp $	*/
 
 /*
  * Copyright (c) 2005, 2006  Antti Kantee.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if !defined(lint)
-__RCSID("$NetBSD: opdump.c,v 1.28 2010/01/07 18:09:07 pooka Exp $");
+__RCSID("$NetBSD: opdump.c,v 1.29 2010/01/07 20:47:47 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/types.h>
@@ -195,11 +195,20 @@
 		case PUFFS_VN_READDIR:
 			puffsdump_readdir(preq);
 			break;
+		case PUFFS_VN_CREATE:
+		case PUFFS_VN_MKDIR:
+		case PUFFS_VN_MKNOD:
+		case PUFFS_VN_SYMLINK:
+			puffsdump_create(preq);
+			break;
+		case PUFFS_VN_SETATTR:
+			puffsdump_attr(preq);
+			break;
 		default:
 			break;
 		}
 	}
-	
+
 	PU_LOCK();
 	gettimeofday(&tv_now, NULL);
 	timersub(&tv_now, &tv_prev, &tv);
@@ -231,6 +240,9 @@
 		case PUFFS_VN_READDIR:
 			puffsdump_readdir_rv(preq);
 			break;
+		case PUFFS_VN_GETATTR:
+			puffsdump_attr(preq);
+			break;
 		default:
 			break;
 		}
@@ -241,6 +253,137 @@
 	    preq->preq_rv ? strerror(preq->preq_rv) : "");
 }
 
+/*
+ * Slightly tedious print-routine so that we get a nice NOVAL instead
+ * of some tedious output representations for -1, especially (uint64_t)-1
+ *
+ * We use typecasting to make this work beyond time_t/dev_t size changes.
+ */
+static void
+dumpattr(struct vattr *vap)
+{
+	const char * const vtypes[] = { VNODE_TYPES };
+	char buf[128];
+
+/* XXX: better readability.  and this is debug, so no cycle-sweat */
+#define DEFAULTBUF() snprintf(buf, sizeof(buf), "NOVAL")
+
+	printf(DINT "vattr:\n");
+	printf(DINT DINT "type: %s, ", vtypes[vap->va_type]);
+
+	DEFAULTBUF();
+	if (vap->va_mode != (mode_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "0%o", vap->va_mode);
+	printf("mode: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_nlink != (nlink_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%d", vap->va_nlink);
+	printf("nlink: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_uid != (uid_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%d", vap->va_uid);
+	printf("uid: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_gid != (gid_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%d", vap->va_gid);
+	printf("gid: %s\n", buf);
+
+	DEFAULTBUF();
+	if (vap->va_fsid != (dev_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "0x%llx",
+		    (unsigned long long)vap->va_fsid);
+	printf(DINT DINT "fsid: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_fileid != (ino_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_fileid);
+	printf("ino: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_size != (u_quad_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_size);
+	printf("size: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_blocksize != (long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%ld", vap->va_blocksize);
+	printf("bsize: %s\n", buf);
+
+	DEFAULTBUF();
+	if (vap->va_atime.tv_sec != (time_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%lld",
+		    (long long)vap->va_atime.tv_sec);
+	printf(DINT DINT "a.s: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_atime.tv_nsec != (long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%ld", vap->va_atime.tv_nsec);
+	printf("a.ns: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_mtime.tv_sec != (time_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%lld",
+		    (long long)vap->va_mtime.tv_sec);
+	printf("m.s: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_mtime.tv_nsec != (long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%ld", vap->va_mtime.tv_nsec);
+	printf("m.ns: %s\n", buf);
+
+	DEFAULTBUF();
+	if (vap->va_ctime.tv_sec != (time_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%lld",
+		    (long long)vap->va_ctime.tv_sec);
+	printf(DINT DINT "c.s: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_ctime.tv_nsec != (long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%ld", vap->va_ctime.tv_nsec);
+	printf("c.ns: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_birthtime.tv_sec != (time_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%lld",
+		    (long long)vap->va_birthtime.tv_sec);
+	printf("b.s: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_birthtime.tv_nsec != (long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%ld", vap->va_birthtime.tv_nsec);
+	printf("b.ns: %s\n", buf);
+
+	DEFAULTBUF();
+	if (vap->va_gen != (u_long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%lu", vap->va_gen);
+	printf(DINT DINT "gen: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_flags != (u_long)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "0x%lx", vap->va_flags);
+	printf("flags: %s, ", buf);
+
+	DEFAULTBUF();
+	if (vap->va_rdev != (dev_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "0x%llx",
+		    (unsigned long long)vap->va_rdev);
+	printf("rdev: %s\n", buf);
+
+	DEFAULTBUF();
+	if (vap->va_bytes != (u_quad_t)PUFFS_VNOVAL)
+		snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_bytes);
+	printf(DINT DINT "bytes: %s, ", buf);
+
+	snprintf(buf, sizeof(buf), "%" PRIu64, vap->va_filerev);
+	printf("filerev: %s, ", buf);
+
+	snprintf(buf, sizeof(buf), "0x%x", vap->va_vaflags);
+	printf("vaflags: %s\n", buf);
+}
+
 void
 puffsdump_cookie(puffs_cookie_t c, const char *cookiename)
 {
@@ -284,6 +427,15 @@
 }
 
 void
+puffsdump_create(struct puffs_req *preq)
+{
+	/* XXX: wrong type, but we know it fits the slot */
+	struct puffs_vnmsg_create *create_msg = (void *)preq;
+	
+	dumpattr(&create_msg->pvnr_va);
+}
+
+void
 puffsdump_create_rv(struct puffs_req *preq)
 {
 	/* XXX: wrong type, but we know it fits the slot */
@@ -341,3 +493,11 @@
 
 	printf(DINT "read offset: %" PRId64 "\n", readdir_msg->pvnr_offset);
 }
+
+void
+puffsdump_attr(struct puffs_req *preq)
+{
+	struct puffs_vnmsg_setgetattr *attr_msg = (void *)preq;
+
+	dumpattr(&attr_msg->pvnr_va);
+}

Index: src/lib/libpuffs/puffsdump.h
diff -u src/lib/libpuffs/puffsdump.h:1.13 src/lib/libpuffs/puffsdump.h:1.14
--- src/lib/libpuffs/puffsdump.h:1.13	Thu Jan  7 18:09:07 2010
+++ src/lib/libpuffs/puffsdump.h	Thu Jan  7 20:47:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: puffsdump.h,v 1.13 2010/01/07 18:09:07 pooka Exp $	*/
+/*	$NetBSD: puffsdump.h,v 1.14 2010/01/07 20:47:47 pooka Exp $	*/
 
 /*
  * Copyright (c) 2006  Antti Kantee.  All Rights Reserved.
@@ -48,8 +48,11 @@
 void puffsdump_readdir_rv(struct puffs_req *);
 void puffsdump_lookup(struct puffs_req *);
 void puffsdump_lookup_rv(struct puffs_req *);
+void puffsdump_create(struct puffs_req *);
 void puffsdump_create_rv(struct puffs_req *);
 void puffsdump_open(struct puffs_req *);
+
+void puffsdump_attr(struct puffs_req *);
 void puffsdump_targ(struct puffs_req *);
 
 #endif /* _PUFFSDUMP_H_ */

Reply via email to