The VFLAG column of pstat -v is a bit wonky:
ADDR TYP VFLAG USE HOLD FILEID IFLAG RDEV|SZ
cc2ece20 chr - 1 0 4244 Am kmem
cc2ecdac chr - 1 0 4243 mem
cc30f920 chr I 2 0 3763 ACUm ttyp2
cc30f8ac chr I 1 0 3764 ACUm ptyp2
cc30f838 chr F- 0 0 3891 ptm
...
cc80c48c blk s- 17 7 3440 sd0l
...
cc80cd28 dir RF 0 2 2 512
Why "F-" or "s-" but "RF"? Because the decision of whether to print a '-'
to placehold the column when there are no flags ignores the 'B', 'F', and
'S' flags! Diff below switches to deciding to print a '-' only if we
haven't printed any flags, instead of basing it on whether one of the
flags members is zero.
ok?
Philip
Index: usr.sbin/pstat/pstat.c
===================================================================
RCS file: /cvs/src/usr.sbin/pstat/pstat.c,v
retrieving revision 1.106
diff -u -p -r1.106 pstat.c
--- usr.sbin/pstat/pstat.c 3 Jun 2016 20:38:48 -0000 1.106
+++ usr.sbin/pstat/pstat.c 18 Jul 2016 10:22:37 -0000
@@ -407,7 +407,7 @@ void
vnode_print(struct vnode *avnode, struct vnode *vp)
{
char *type, flags[16];
- char *fp = flags;
+ char *fp;
int flag;
/*
@@ -438,6 +438,7 @@ vnode_print(struct vnode *avnode, struct
/*
* gather flags
*/
+ fp = flags;
flag = vp->v_flag;
if (flag & VROOT)
*fp++ = 'R';
@@ -461,7 +462,7 @@ vnode_print(struct vnode *avnode, struct
*fp++ = 'l';
if (vp->v_bioflag & VBIOONSYNCLIST)
*fp++ = 's';
- if (flag == 0)
+ if (fp == flags)
*fp++ = '-';
*fp = '\0';
(void)printf("%0*lx %s %5s %4d %4u",