#	@(#)vchain	8.1 (Berkeley) 6/10/93
#
# Given a vnode, follow its mount pointers
define vchain

	set $num = 0

	set $vp=(struct vnode *)$arg0
	while ($vp)
		vprint $vp
		set $num++
		set $vp = $vp->v_mountf
	end
	printf "Number of vnodes: %d\n", $num
end

define vprint
	set $vp=(struct vnode *)$arg0
	set $ip=(struct inode *)$vp->v_data
	printf "vp: 0x%x freef: 0x%x usecount: %d flags: 0x%x\n", $vp, $vp->v_freef, $vp->v_usecount, $vp->v_flag
	if ($vp->v_tag == VT_UFS)
		printf "tag VT_UFS, ino %lu,", $ip->i_number
		set $lkp=(struct lock *)&($ip->i_lock)
		if ($lkp->lk_sharecount)
			printf " lock type %s: SHARED (count %d)", $lkp->lk_wmesg, $lkp->lk_sharecount
		else if ($lkp->lk_flags & LK_HAVE_EXCL)
			printf " lock type %s: EXCL (count %d) by pid %d", $lkp->lk_wmesg, $lkp->lk_exclusivecount, $lkp->lk_lockholder
		endif
		if ($lkp->lk_waitcount > 0)
			printf " with %d pending", $lkp->lk_waitcount
		endif
	endif
end

define vall
	set $mp=rootfs
	while ($mp)
		vchain $mp->mnt_mounth
		set $mp=$mp->mnt_next
	end
end
