Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 07 Dec 2008 11:26:08 -0500
From:      Joe Marcus Clarke <marcus@FreeBSD.org>
To:        arch@FreeBSD.org
Subject:   RFC: New VOP to translate vnode to its component name
Message-ID:  <1228667168.69753.16.camel@shumai.marcuscom.com>

next in thread | raw e-mail | index | archive | help

--=-tv//F06os/NUUK18nANr
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Background:

Procstat (i.e. kinfo_file) was a great addition which allows userland
processes to get a list of open files for a process without the need for
elevated privileges (e.g. kmem access).  This feature uses the VFS cache
to find component names from vnodes in a process' file descriptor table.
Because of its ease of use, I quickly deployed it into libgtop so that
it could provide an lsof-like feature for FreeBSD.

Another need arose that seemed perfect for procstat: the ability to find
out what process had the various mouse devices open.  This was needed
for X.Org's HAL integration.  Unfortunately, due to the fact that devfs
did not make use of the VFS cache, this was impossible to do without
bringing it a lot of kvm code from fstat, or simply exec'ing fstat
periodically.  I chose the latter.  The consequence is easier-to-read
code, but a performance hit with default HAL configurations.

Robert Watson suggested I teach the VFS cache lookup function to query
file systems directly when cache lookups fail.  After a few false
starts, and with the help of kib, I think I have a committable
implementation.

Solution:

Here is a patch to HEAD, along with a man page, for VOP_CNP.  VOP_CNP
translates a vnode to its component name.  It is currently called from
vn_fullpath1() to traverse a vnode hierarchy when cache lookups for
those vnodes fail.  I have currently implemented VOP_CNP for devfs and
pseudofs.  Kostik has thoroughly reviewed the devfs implementation.  I
only recently did the pseudofs implementation at his request.
Additionally, the devfs implementation has gone through a Peter Holm
stress test, and survives (the pseudofs implementation survives WITNESS
and VFS lock debugging).

I would like to commit this work with a possible MFC to RELENG_7 to come
later.

http://www.marcuscom.com/downloads/vop_cnp_10.diff
http://www.marcuscom.com/downloads/VOP_CNP.9

Joe

--=20
Joe Marcus Clarke
FreeBSD GNOME Team      ::      gnome@FreeBSD.org
FreeNode / #freebsd-gnome
http://www.FreeBSD.org/gnome

--=-tv//F06os/NUUK18nANr
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEABECAAYFAkk7+R8ACgkQb2iPiv4Uz4fGFACgl7YfiCV7rZNjFeNpw+4Dvd2E
6ugAoIyZxSFvm4w62izH1j6w5Izj/t4a
=PhJ+
-----END PGP SIGNATURE-----

--=-tv//F06os/NUUK18nANr--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1228667168.69753.16.camel>