diff options
author | Ruediger Meier | 2017-03-31 17:16:07 +0200 |
---|---|---|
committer | Ruediger Meier | 2017-04-03 09:34:38 +0200 |
commit | 61e29ab44fc97bcf86c216ac66e3163739170198 (patch) | |
tree | b49d790a1741c3c8fa2191a63693cf8d62fd4d97 /sys-utils/ipcs.c | |
parent | tests: add --mountpoint to findmnt calls (diff) | |
download | kernel-qcow2-util-linux-61e29ab44fc97bcf86c216ac66e3163739170198.tar.gz kernel-qcow2-util-linux-61e29ab44fc97bcf86c216ac66e3163739170198.tar.xz kernel-qcow2-util-linux-61e29ab44fc97bcf86c216ac66e3163739170198.zip |
ipcs: make shmall overflow a bit less worse
Still no large integer support but on overflow we print now
the largest possible value, maybe even the largest one which
makes sense at all.
So on x86_64 systems we'll see now:
$ echo "4503599627370496" > /proc/sys/kernel/shmall
$ ipcs -m -l | grep "max total"
max total shared memory (kbytes) = 18014398509481980
rather than this:
$ ipcs -m -l | grep "max total"
max total shared memory (kbytes) = 0
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Diffstat (limited to 'sys-utils/ipcs.c')
-rw-r--r-- | sys-utils/ipcs.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys-utils/ipcs.c b/sys-utils/ipcs.c index 4f3d23d90..3c4e5df0e 100644 --- a/sys-utils/ipcs.c +++ b/sys-utils/ipcs.c @@ -198,6 +198,7 @@ static void do_shm (char format, int unit) case LIMITS: { struct ipc_limits lim; + uint64_t tmp, pgsz = getpagesize(); if (ipc_shm_get_limits(&lim)) { printf (_("unable to fetch shared memory limits\n")); @@ -207,9 +208,14 @@ static void do_shm (char format, int unit) printf (_("max number of segments = %ju\n"), lim.shmmni); ipc_print_size(unit == IPC_UNIT_DEFAULT ? IPC_UNIT_KB : unit, _("max seg size"), lim.shmmax, "\n", 0); + + tmp = (uint64_t) lim.shmall * pgsz; + /* overflow handling, at least we don't print ridiculous small values */ + if (lim.shmall != 0 && tmp / lim.shmall != pgsz) { + tmp = UINT64_MAX - (UINT64_MAX % pgsz); + } ipc_print_size(unit == IPC_UNIT_DEFAULT ? IPC_UNIT_KB : unit, - _("max total shared memory"), - (uint64_t) lim.shmall * getpagesize(), "\n", 0); + _("max total shared memory"), tmp, "\n", 0); ipc_print_size(unit == IPC_UNIT_DEFAULT ? IPC_UNIT_BYTES : unit, _("min seg size"), lim.shmmin, "\n", 0); return; |