+
+#define OP4(bits, name, format, value) \
+ do { \
+ if ((oa->o_valid & (bits)) == (bits)) \
+ printf("%s: "format"\n", (name), value); \
+ } while (0)
+
+#define OPM(bits, member, format) \
+ OP4(bits, #member, format, (uintmax_t)(oa->o_ ## member))
+
+#define OPO(bits, member) OPM(bits, member, "%#jo")
+#define OPU(bits, member) OPM(bits, member, "%ju")
+#define OPX(bits, member) OPM(bits, member, "%#jx")
+
+ OPX(0, valid);
+ OPX(OBD_MD_FLID | OBD_MD_FLGROUP, oi.oi.oi_id);
+ OPX(OBD_MD_FLID | OBD_MD_FLGROUP, oi.oi.oi_seq);
+ OP4(OBD_MD_FLID | OBD_MD_FLGROUP, "oi.oi_fid", DFID, PFID(&oa->o_oi.oi_fid));
+ OPU(OBD_MD_FLATIME, atime);
+ OPU(OBD_MD_FLMTIME, mtime);
+ OPU(OBD_MD_FLCTIME, ctime);
+ OPU(OBD_MD_FLSIZE, size);
+ OPU(OBD_MD_FLBLOCKS, blocks);
+ OPU(OBD_MD_FLBLKSZ, blksize);
+ OPO(OBD_MD_FLMODE | OBD_MD_FLTYPE, mode);
+ OPU(OBD_MD_FLUID, uid);
+ OPU(OBD_MD_FLGID, gid);
+ OPU(OBD_MD_FLFLAGS, flags);
+ OPU(OBD_MD_FLNLINK, nlink);
+ OPX(OBD_MD_FLPARENT | OBD_MD_FLFID, parent_seq);
+ OPX(OBD_MD_FLPARENT | OBD_MD_FLFID, parent_oid);
+ OPX(OBD_MD_FLPARENT | OBD_MD_FLFID, parent_ver);
+ OPU(OBD_MD_LAYOUT_VERSION, layout_version);
+ OPU(OBD_MD_FLGRANT, grant);
+ OPU(OBD_MD_FLPROJID, projid);
+ OPU(OBD_MD_FLDATAVERSION, data_version);
+#undef OP4
+#undef OPM
+#undef OPO
+#undef OPU
+#undef OPX
+
+ return 0;