>    This this patch to /usr/src/lib/libkvm/kvm_getswapinfo.c.  Then
>    recompile libkvm and try top and pstat -s again.

>Index: kvm_getswapinfo.c
>===================================================================
>RCS file: /home/ncvs/src/lib/libkvm/kvm_getswapinfo.c,v
>retrieving revision 1.4
>diff -u -r1.4 kvm_getswapinfo.c
>--- kvm_getswapinfo.c  1999/01/27 11:29:15     1.4
>+++ kvm_getswapinfo.c  1999/02/06 04:46:48
>@@ -127,10 +127,10 @@
>               KGET(NL_NSWDEV, nswdev);
>               KGET(NL_DMMAX, dmmax);
> 
>-              if (kvm_swap_nl[NL_SWAPLIST].n_value)
>+              if (kvm_swap_nl[NL_SWAPLIST].n_type != N_UNDF)
>                       type = 1;
> 
>-              if (kvm_swap_nl[NL_SWAPBLIST].n_value)
>+              if (kvm_swap_nl[NL_SWAPBLIST].n_type != N_UNDF)
>                       type = 2;
> 
>               /*
>@@ -406,6 +406,13 @@
>       struct blist blcopy = { 0 };
> 
>       KGET(NL_SWAPBLIST, swapblist);
>+
>+      if (swapblist == NULL) {
>+              if (flags & SWIF_DUMP_TREE)
>+                      printf("radix tree: NULL - no swap in system\n");
>+              return;
>+      }
>+
>       KGET2(swapblist, &blcopy, sizeof(blcopy), "*swapblist");
> 
>       if (flags & SWIF_DUMP_TREE) {


This needs more work
- library routines shouldn't print to stdout or stderr, especially when
  there is a function like kvm_geterr() for reporting errors.
- no swap is not an error.
- top still gets a SIGFPE (the bug is in top -- it divides by
  swpary[0].ksw_total which may be 0).
- pstat and systat have the same bug as top.
- libkvm is still bloated with support for old swapping methods, despite
  more important parts of libkvm not working with kernels more than a
  few days old because the proc struct changed significantly.

Bruce

To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to