KSTAT_CHAIN_UPDATE(3KSTAT) Kernel Statistics Library Functions

NAME


kstat_chain_update - update the kstat header chain

Library
Kernel Statistics Library (libkstat, -lkstat)

SYNOPSIS


#include <kstat.h>

kid_t
kstat_chain_update(kstat_ctl_t *kc);

DESCRIPTION


The kstat_chain_update() function brings the user's kstat header chain in
sync with that of the kernel. The kstat chain is a linked list of kstat
headers (kstat_t's) pointed to by `kc->kc_chain', which is initialized by
kstat_open(3KSTAT). This chain constitutes a list of all kstats currently
in the system.

During normal operation, the kernel creates new kstats and deletes old ones
as various device instances are added and removed, thereby causing the
user's copy of the kstat chain to become out of date. The
kstat_chain_update() function detects this condition by comparing the
kernel's current kstat chain ID (KCID), which is incremented every time the
kstat chain changes, to the user's KCID, `kc->kc_chain_id'. If the KCIDs
match, kstat_chain_update() does nothing. Otherwise, it deletes any
invalid kstat headers from the user's kstat chain, adds any new ones, and
sets `kc->kc_chain_id' to the new KCID. All other kstat headers in the
user's kstat chain are unmodified.

Because of the deletion process, any kstat_t structures retrieved by the
kstat_lookup(3KSTAT) function or data pointers obtained through the
kstat_data_lookup(3KSTAT) function are invalidated by a call to
kstat_chain_update(). New lookup calls must be made to obtain fresh
structures after each chain update.

RETURN VALUES


Upon successful completion, kstat_chain_update() returns the new KCID if
the kstat chain has changed and 0 if it has not changed. Otherwise, it
returns -1 and sets errno to indicate the error.

FILES


/dev/kstat kernel statistics driver character device

ERRORS


The kstat_chain_update() function will fail if:

EAGAIN The kstat was temporarily unavailable for reading or
writing.

ENOMEM Insufficient storage space is available.

ENXIO The given kstat could not be located for reading.

EOVERFLOW The data for the given kstat was too large to be stored
in the structure.

INTERFACE STABILITY


Committed

MT-LEVEL
Unsafe

SEE ALSO


kstat(3KSTAT), kstat_lookup(3KSTAT), kstat_open(3KSTAT),
kstat_read(3KSTAT), attributes(7)

illumos November 29, 2021 illumos