commit 29092aa58df23fcc43f813d54b16a733d19f770c
Author: Nathan Scott <nathans@redhat.com>
Date: Tue Jul 16 12:28:26 2019 +1000
pmdalinux: fix hugepage metric value calculations
The values for some of the Linux kernel hugepage metrics were
being incorrectly multiplied by 1024. This was due to a code
assumption in proc_meminfo.c::refresh_proc_meminfo around line
115, which was assuming all meminfo values needed conversion
from kbytes to bytes - not so for these metrics.
The fix involves removing this assumption (for all values from
/proc/meminfo) and individually applying unit conversion where
needed only. Updated calculations are now reflected in qa/821.
Resolves Red Hat BZ #1730107.
diff --git a/qa/821.out b/qa/821.out
index b519775e9..8ab0d47b3 100644
--- a/qa/821.out
+++ b/qa/821.out
@@ -5360,28 +5360,28 @@ mem.util.highTotal
No value(s) available!
mem.util.hugepagesFree
- value 185344
+ value 181
mem.util.hugepagesFreeBytes
- value 388694540288
+ value 379584512
mem.util.hugepagesRsvd
- value 11264
+ value 11
mem.util.hugepagesRsvdBytes
- value 23622320128
+ value 23068672
mem.util.hugepagesSurp
- value 8192
+ value 8
mem.util.hugepagesSurpBytes
- value 17179869184
+ value 16777216
mem.util.hugepagesTotal
- value 204800
+ value 200
mem.util.hugepagesTotalBytes
- value 429496729600
+ value 419430400
mem.util.inactive
value 17315560
diff --git a/src/pmdas/linux/pmda.c b/src/pmdas/linux/pmda.c
index f8460902b..115731a6e 100644
--- a/src/pmdas/linux/pmda.c
+++ b/src/pmdas/linux/pmda.c
@@ -6483,18 +6483,18 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
case 0: /* mem.physmem (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.MemTotal >> 10;
+ atom->ull = proc_meminfo.MemTotal;
break;
case 1: /* mem.util.used (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal) ||
!MEMINFO_VALID_VALUE(proc_meminfo.MemFree))
return 0; /* no values available */
- atom->ull = (proc_meminfo.MemTotal - proc_meminfo.MemFree) >> 10;
+ atom->ull = proc_meminfo.MemTotal - proc_meminfo.MemFree;
break;
case 2: /* mem.util.free (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.MemFree >> 10;
+ atom->ull = proc_meminfo.MemFree;
break;
case 3: /* mem.util.shared (in kbytes) */
/*
@@ -6504,43 +6504,43 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
*/
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemShared))
return 0; /* no values available */
- atom->ull = proc_meminfo.MemShared >> 10;
+ atom->ull = proc_meminfo.MemShared;
break;
case 4: /* mem.util.bufmem (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Buffers))
return 0; /* no values available */
- atom->ull = proc_meminfo.Buffers >> 10;
+ atom->ull = proc_meminfo.Buffers;
break;
case 5: /* mem.util.cached (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Cached))
return 0; /* no values available */
- atom->ull = proc_meminfo.Cached >> 10;
+ atom->ull = proc_meminfo.Cached;
break;
case 6: /* swap.length (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapTotal;
+ atom->ull = proc_meminfo.SwapTotal << 10;
break;
case 7: /* swap.used (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal) ||
!MEMINFO_VALID_VALUE(proc_meminfo.SwapFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapTotal - proc_meminfo.SwapFree;
+ atom->ull = (proc_meminfo.SwapTotal - proc_meminfo.SwapFree) << 10;
break;
case 8: /* swap.free (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapFree;
+ atom->ull = proc_meminfo.SwapFree << 10;
break;
case 9: /* hinv.physmem (in mbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal))
return 0; /* no values available */
- atom->ul = proc_meminfo.MemTotal >> 20;
+ atom->ul = proc_meminfo.MemTotal >> 10;
break;
case 10: /* mem.freemem (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.MemFree >> 10;
+ atom->ull = proc_meminfo.MemFree;
break;
case 11: /* hinv.pagesize (in bytes) */
atom->ul = 1 << _pm_pageshift;
@@ -6552,91 +6552,91 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
!MEMINFO_VALID_VALUE(proc_meminfo.Cached) ||
!MEMINFO_VALID_VALUE(proc_meminfo.Buffers))
return 0; /* no values available */
- sl = (proc_meminfo.MemTotal -
+ sl = proc_meminfo.MemTotal -
proc_meminfo.MemFree -
proc_meminfo.Cached -
- proc_meminfo.Buffers) >> 10;
+ proc_meminfo.Buffers;
atom->ull = sl >= 0 ? sl : 0;
break;
case 13: /* mem.util.swapCached (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapCached))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapCached >> 10;
+ atom->ull = proc_meminfo.SwapCached;
break;
case 14: /* mem.util.active (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Active))
return 0; /* no values available */
- atom->ull = proc_meminfo.Active >> 10;
+ atom->ull = proc_meminfo.Active;
break;
case 15: /* mem.util.inactive (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive))
return 0; /* no values available */
- atom->ull = proc_meminfo.Inactive >> 10;
+ atom->ull = proc_meminfo.Inactive;
break;
case 16: /* mem.util.highTotal (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HighTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.HighTotal >> 10;
+ atom->ull = proc_meminfo.HighTotal;
break;
case 17: /* mem.util.highFree (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HighFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.HighFree >> 10;
+ atom->ull = proc_meminfo.HighFree;
break;
case 18: /* mem.util.lowTotal (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.LowTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.LowTotal >> 10;
+ atom->ull = proc_meminfo.LowTotal;
break;
case 19: /* mem.util.lowFree (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.LowFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.LowFree >> 10;
+ atom->ull = proc_meminfo.LowFree;
break;
case 20: /* mem.util.swapTotal (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapTotal >> 10;
+ atom->ull = proc_meminfo.SwapTotal;
break;
case 21: /* mem.util.swapFree (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.SwapFree >> 10;
+ atom->ull = proc_meminfo.SwapFree;
break;
case 22: /* mem.util.dirty (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Dirty))
return 0; /* no values available */
- atom->ull = proc_meminfo.Dirty >> 10;
+ atom->ull = proc_meminfo.Dirty;
break;
case 23: /* mem.util.writeback (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Writeback))
return 0; /* no values available */
- atom->ull = proc_meminfo.Writeback >> 10;
+ atom->ull = proc_meminfo.Writeback;
break;
case 24: /* mem.util.mapped (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Mapped))
return 0; /* no values available */
- atom->ull = proc_meminfo.Mapped >> 10;
+ atom->ull = proc_meminfo.Mapped;
break;
case 25: /* mem.util.slab (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Slab))
return 0; /* no values available */
- atom->ull = proc_meminfo.Slab >> 10;
+ atom->ull = proc_meminfo.Slab;
break;
case 26: /* mem.util.committed_AS (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Committed_AS))
return 0; /* no values available */
- atom->ull = proc_meminfo.Committed_AS >> 10;
+ atom->ull = proc_meminfo.Committed_AS;
break;
case 27: /* mem.util.pageTables (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.PageTables))
return 0; /* no values available */
- atom->ull = proc_meminfo.PageTables >> 10;
+ atom->ull = proc_meminfo.PageTables;
break;
case 28: /* mem.util.reverseMaps (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.ReverseMaps))
return 0; /* no values available */
- atom->ull = proc_meminfo.ReverseMaps >> 10;
+ atom->ull = proc_meminfo.ReverseMaps;
break;
case 29: /* mem.util.cache_clean (in kbytes) */
/* clean=cached-(dirty+writeback) */
@@ -6644,180 +6644,184 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
!MEMINFO_VALID_VALUE(proc_meminfo.Dirty) ||
!MEMINFO_VALID_VALUE(proc_meminfo.Writeback))
return 0; /* no values available */
- sl = (proc_meminfo.Cached -
+ sl = proc_meminfo.Cached -
proc_meminfo.Dirty -
- proc_meminfo.Writeback) >> 10;
+ proc_meminfo.Writeback;
atom->ull = sl >= 0 ? sl : 0;
break;
case 30: /* mem.util.anonpages */
if (!MEMINFO_VALID_VALUE(proc_meminfo.AnonPages))
return 0; /* no values available */
- atom->ull = proc_meminfo.AnonPages >> 10;
+ atom->ull = proc_meminfo.AnonPages;
break;
case 31: /* mem.util.commitLimit (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.CommitLimit))
return 0; /* no values available */
- atom->ull = proc_meminfo.CommitLimit >> 10;
+ atom->ull = proc_meminfo.CommitLimit;
break;
case 32: /* mem.util.bounce */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Bounce))
return 0; /* no values available */
- atom->ull = proc_meminfo.Bounce >> 10;
+ atom->ull = proc_meminfo.Bounce;
break;
case 33: /* mem.util.NFS_Unstable */
if (!MEMINFO_VALID_VALUE(proc_meminfo.NFS_Unstable))
return 0; /* no values available */
- atom->ull = proc_meminfo.NFS_Unstable >> 10;
+ atom->ull = proc_meminfo.NFS_Unstable;
break;
case 34: /* mem.util.slabReclaimable */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SlabReclaimable))
return 0; /* no values available */
- atom->ull = proc_meminfo.SlabReclaimable >> 10;
+ atom->ull = proc_meminfo.SlabReclaimable;
break;
case 35: /* mem.util.slabUnreclaimable */
if (!MEMINFO_VALID_VALUE(proc_meminfo.SlabUnreclaimable))
return 0; /* no values available */
- atom->ull = proc_meminfo.SlabUnreclaimable >> 10;
+ atom->ull = proc_meminfo.SlabUnreclaimable;
break;
case 36: /* mem.util.active_anon */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Active_anon))
return 0; /* no values available */
- atom->ull = proc_meminfo.Active_anon >> 10;
+ atom->ull = proc_meminfo.Active_anon;
break;
case 37: /* mem.util.inactive_anon */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive_anon))
return 0; /* no values available */
- atom->ull = proc_meminfo.Inactive_anon >> 10;
+ atom->ull = proc_meminfo.Inactive_anon;
break;
case 38: /* mem.util.active_file */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Active_file))
return 0; /* no values available */
- atom->ull = proc_meminfo.Active_file >> 10;
+ atom->ull = proc_meminfo.Active_file;
break;
case 39: /* mem.util.inactive_file */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive_file))
return 0; /* no values available */
- atom->ull = proc_meminfo.Inactive_file >> 10;
+ atom->ull = proc_meminfo.Inactive_file;
break;
case 40: /* mem.util.unevictable */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Unevictable))
return 0; /* no values available */
- atom->ull = proc_meminfo.Unevictable >> 10;
+ atom->ull = proc_meminfo.Unevictable;
break;
case 41: /* mem.util.mlocked */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Mlocked))
return 0; /* no values available */
- atom->ull = proc_meminfo.Mlocked >> 10;
+ atom->ull = proc_meminfo.Mlocked;
break;
case 42: /* mem.util.shmem */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Shmem))
return 0; /* no values available */
- atom->ull = proc_meminfo.Shmem >> 10;
+ atom->ull = proc_meminfo.Shmem;
break;
case 43: /* mem.util.kernelStack */
if (!MEMINFO_VALID_VALUE(proc_meminfo.KernelStack))
return 0; /* no values available */
- atom->ull = proc_meminfo.KernelStack >> 10;
+ atom->ull = proc_meminfo.KernelStack;
break;
- case 44: /* mem.util.hugepagesTotal */
+ case 44: /* mem.util.hugepagesTotal (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesTotal))
return 0; /* no values available */
atom->ull = proc_meminfo.HugepagesTotal;
break;
- case 45: /* mem.util.hugepagesFree */
+ case 45: /* mem.util.hugepagesFree (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesFree))
return 0; /* no values available */
atom->ull = proc_meminfo.HugepagesFree;
break;
- case 46: /* mem.util.hugepagesRsvd */
+ case 46: /* mem.util.hugepagesRsvd (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesRsvd))
return 0; /* no values available */
atom->ull = proc_meminfo.HugepagesRsvd;
break;
- case 47: /* mem.util.hugepagesSurp */
+ case 47: /* mem.util.hugepagesSurp (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesSurp))
return 0; /* no values available */
atom->ull = proc_meminfo.HugepagesSurp;
break;
- case 48: /* mem.util.directMap4k */
+ case 48: /* mem.util.directMap4k (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap4k))
return 0; /* no values available */
- atom->ull = proc_meminfo.directMap4k >> 10;
+ atom->ull = proc_meminfo.directMap4k;
break;
- case 49: /* mem.util.directMap2M */
+ case 49: /* mem.util.directMap2M (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap2M))
return 0; /* no values available */
- atom->ull = proc_meminfo.directMap2M >> 10;
+ atom->ull = proc_meminfo.directMap2M;
break;
- case 50: /* mem.util.vmallocTotal */
+ case 50: /* mem.util.vmallocTotal (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.VmallocTotal >> 10;
+ atom->ull = proc_meminfo.VmallocTotal;
break;
- case 51: /* mem.util.vmallocUsed */
+ case 51: /* mem.util.vmallocUsed (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocUsed))
return 0; /* no values available */
- atom->ull = proc_meminfo.VmallocUsed >> 10;
+ atom->ull = proc_meminfo.VmallocUsed;
break;
- case 52: /* mem.util.vmallocChunk */
+ case 52: /* mem.util.vmallocChunk (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocChunk))
return 0; /* no values available */
- atom->ull = proc_meminfo.VmallocChunk >> 10;
+ atom->ull = proc_meminfo.VmallocChunk;
break;
- case 53: /* mem.util.mmap_copy */
+ case 53: /* mem.util.mmap_copy (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MmapCopy))
return 0; /* no values available */
- atom->ull = proc_meminfo.MmapCopy >> 10;
+ atom->ull = proc_meminfo.MmapCopy;
break;
- case 54: /* mem.util.quicklists */
+ case 54: /* mem.util.quicklists (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Quicklists))
return 0; /* no values available */
- atom->ull = proc_meminfo.Quicklists >> 10;
+ atom->ull = proc_meminfo.Quicklists;
break;
- case 55: /* mem.util.corrupthardware */
+ case 55: /* mem.util.corrupthardware (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HardwareCorrupted))
return 0; /* no values available */
- atom->ull = proc_meminfo.HardwareCorrupted >> 10;
+ atom->ull = proc_meminfo.HardwareCorrupted;
break;
- case 56: /* mem.util.anonhugepages */
+ case 56: /* mem.util.anonhugepages (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.AnonHugePages))
return 0; /* no values available */
- atom->ull = proc_meminfo.AnonHugePages >> 10;
+ atom->ull = proc_meminfo.AnonHugePages;
break;
- case 57: /* mem.util.directMap1G */
+ case 57: /* mem.util.directMap1G (in pages) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap1G))
return 0; /* no values available */
- atom->ull = proc_meminfo.directMap1G >> 10;
+ atom->ull = proc_meminfo.directMap1G;
break;
- case 58: /* mem.util.available */
+ case 58: /* mem.util.available (in kbytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.MemAvailable))
return 0; /* no values available */
- atom->ull = proc_meminfo.MemAvailable >> 10;
+ atom->ull = proc_meminfo.MemAvailable;
break;
case 59: /* hinv.hugepagesize (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Hugepagesize))
return 0; /* no values available */
- atom->ul = proc_meminfo.Hugepagesize;
+ atom->ul = (proc_meminfo.Hugepagesize << 10);
break;
- case 60: /* mem.util.hugepagesTotalBytes */
+ case 60: /* mem.util.hugepagesTotalBytes (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesTotal))
return 0; /* no values available */
- atom->ull = proc_meminfo.HugepagesTotal * proc_meminfo.Hugepagesize;
+ atom->ull = proc_meminfo.HugepagesTotal *
+ (proc_meminfo.Hugepagesize << 10);
break;
- case 61: /* mem.util.hugepagesFreeBytes */
+ case 61: /* mem.util.hugepagesFreeBytes (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesFree))
return 0; /* no values available */
- atom->ull = proc_meminfo.HugepagesFree * proc_meminfo.Hugepagesize;
+ atom->ull = proc_meminfo.HugepagesFree *
+ (proc_meminfo.Hugepagesize << 10);
break;
- case 62: /* mem.util.hugepagesRsvdBytes */
+ case 62: /* mem.util.hugepagesRsvdBytes (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesRsvd))
return 0; /* no values available */
- atom->ull = proc_meminfo.HugepagesRsvd * proc_meminfo.Hugepagesize;
+ atom->ull = proc_meminfo.HugepagesRsvd *
+ (proc_meminfo.Hugepagesize << 10);
break;
- case 63: /* mem.util.hugepagesSurpBytes */
+ case 63: /* mem.util.hugepagesSurpBytes (in bytes) */
if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesSurp))
return 0; /* no values available */
- atom->ull = proc_meminfo.HugepagesSurp * proc_meminfo.Hugepagesize;
+ atom->ull = proc_meminfo.HugepagesSurp *
+ (proc_meminfo.Hugepagesize << 10);
break;
default:
return PM_ERR_PMID;
@@ -7825,19 +7829,19 @@ linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
if (!MEMINFO_VALID_VALUE(proc_meminfo.Hugepagesize))
return 0; /* no values available */
sts = linux_table_lookup("HugePages_Total:", np->meminfo, &atom->ull);
- atom->ull *= proc_meminfo.Hugepagesize;
+ atom->ull *= (proc_meminfo.Hugepagesize << 10);
break;
case 40: /* mem.numa.util.hugepagesFreeBytes */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Hugepagesize))
return 0; /* no values available */
sts = linux_table_lookup("HugePages_Free:", np->meminfo, &atom->ull);
- atom->ull *= proc_meminfo.Hugepagesize;
+ atom->ull *= (proc_meminfo.Hugepagesize << 10);
break;
case 41: /* mem.numa.util.hugepagesSurpBytes */
if (!MEMINFO_VALID_VALUE(proc_meminfo.Hugepagesize))
return 0; /* no values available */
sts = linux_table_lookup("HugePages_Surp:", np->meminfo, &atom->ull);
- atom->ull *= proc_meminfo.Hugepagesize;
+ atom->ull *= (proc_meminfo.Hugepagesize << 10);
break;
default:
diff --git a/src/pmdas/linux/proc_meminfo.c b/src/pmdas/linux/proc_meminfo.c
index a3270e3ed..c5011ceb8 100644
--- a/src/pmdas/linux/proc_meminfo.c
+++ b/src/pmdas/linux/proc_meminfo.c
@@ -113,7 +113,6 @@ refresh_proc_meminfo(proc_meminfo_t *proc_meminfo)
for (bufp++; *bufp; bufp++) {
if (isdigit((int)*bufp)) {
sscanf(bufp, "%llu", (unsigned long long *)p);
- *p *= 1024; /* kbytes -> bytes */
break;
}
}