Weird problem with devstat interface

Fred Gilham gilham at csl.sri.com
Tue Jun 28 23:30:50 GMT 2005


Poul-Henning Kamp <phk at phk.freebsd.dk> wrote:

> In message <200506281749.j5SHnPlr017616 at quarter.csl.sri.com>, Fred
> Gilham writes:
> 
> >I have been able to get the program to stop doing this by changing
> >the calls to
> >
> >devstat_checkversion()
> >devstat_getnumdevs()
> >devstat_getdevs()
> >
> >so they don't use the kvm interface but the sysctl interface
> >(i.e. passing NULL instead of a file descriptor to /dev/kvm).
> 
> You shouldn't be using the kvm interface in the first place.

That seems reasonable, but the documentation doesn't give any indication
that this is the case.  From the devstat(3) man page:

DESCRIPTION
     The devstat library is a library of helper functions for dealing with the
     kernel devstat(9) interface, which is accessible to users via sysctl(3)
     and kvm(3).  All functions that take a kvm_t * as first argument can be
     passed NULL instead of a kvm handle as this argument, which causes the
     data to be read via sysctl(3).  Otherwise, it is read via kvm(3) using
     the supplied handle.  devstat_checkversion() should be called with each
     kvm handle that is going to be used (or with NULL if sysctl(3) is going
     to be used).

>From this I got the impression that the sysctl interface was a kind of
secondary alternative to the kvm interface.

The /usr/sbin/iostat program also uses the kvm version (see
/usr/src/usr.sbin/iostat/iostat.c).  That's what whoever maintained the
xsysinfo program used as an example.

Also, if the kvm interface is broken it should probably be disabled or
something.  Actually I doubt that it's broken, but certainly the
xsysinfo code doesn't interact well with it.

-- 
Fred Gilham                                        gilham at csl.sri.com
The PTPL (People's Trotskyist Programming League) believes that
hackers are elitist and that all software should be created by the
masses flailing away at millions of keyboards.  I didn't have the
heart to tell them that this has already been tried and the result is
called Linux.


More information about the freebsd-current mailing list