Limit top display of total swap size by the max swap size system can

handle.

Keep both pagesize and the new swap_maxpages in the static variables
to save sysctl calls.

Submitted by:	ota@j.email.ne.jp
PR:	223149
MFC after:	2 weeks
This commit is contained in:
Konstantin Belousov 2017-10-25 11:44:46 +00:00
parent 8d9b040dd4
commit 24e470ef9c

View File

@ -1671,8 +1671,9 @@ static int
swapmode(int *retavail, int *retfree)
{
int n;
int pagesize = getpagesize();
struct kvm_swap swapary[1];
static int pagesize = 0;
static u_long swap_maxpages = 0;
*retavail = 0;
*retfree = 0;
@ -1683,6 +1684,16 @@ swapmode(int *retavail, int *retfree)
if (n < 0 || swapary[0].ksw_total == 0)
return (0);
if (pagesize == 0)
pagesize = getpagesize();
if (swap_maxpages == 0)
GETSYSCTL("vm.swap_maxpages", swap_maxpages);
/* ksw_total contains the total size of swap all devices which may
exceed the maximum swap size allocatable in the system */
if ( swapary[0].ksw_total > swap_maxpages )
swapary[0].ksw_total = swap_maxpages;
*retavail = CONVERT(swapary[0].ksw_total);
*retfree = CONVERT(swapary[0].ksw_total - swapary[0].ksw_used);