summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2017-07-22 05:58:10 +0000
committeralc <alc@FreeBSD.org>2017-07-22 05:58:10 +0000
commitf14b68ffe593a762a04f1aa430771a5229a8398c (patch)
treeef0496bae342a8fc8da95dce33887f54f6f69c5c /sys
parent8a273c31651b9d74a5fe09f3c6ba50f3b1a71522 (diff)
downloadFreeBSD-src-f14b68ffe593a762a04f1aa430771a5229a8398c.zip
FreeBSD-src-f14b68ffe593a762a04f1aa430771a5229a8398c.tar.gz
MFC r315621
Use IDX_TO_OFF(), not ptoa(), when converting the difference between two vm_pindex_t's into a vm_ooffset_t. The length given to shm_dotruncate() must never be negative. Assert this. Tidy up a comment.
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/uipc_shm.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/uipc_shm.c b/sys/kern/uipc_shm.c
index a8d9af5..9240202 100644
--- a/sys/kern/uipc_shm.c
+++ b/sys/kern/uipc_shm.c
@@ -438,6 +438,7 @@ shm_dotruncate(struct shmfd *shmfd, off_t length)
vm_ooffset_t delta;
int base, rv;
+ KASSERT(length >= 0, ("shm_dotruncate: length < 0"));
object = shmfd->shm_object;
VM_OBJECT_WLOCK(object);
if (length == shmfd->shm_size) {
@@ -503,7 +504,7 @@ retry:
vm_pager_page_unswapped(m);
}
}
- delta = ptoa(object->size - nobjsize);
+ delta = IDX_TO_OFF(object->size - nobjsize);
/* Toss in memory pages. */
if (nobjsize < object->size)
@@ -518,8 +519,8 @@ retry:
swap_release_by_cred(delta, object->cred);
object->charge -= delta;
} else {
- /* Attempt to reserve the swap */
- delta = ptoa(nobjsize - object->size);
+ /* Try to reserve additional swap space. */
+ delta = IDX_TO_OFF(nobjsize - object->size);
if (!swap_reserve_by_cred(delta, object->cred)) {
VM_OBJECT_WUNLOCK(object);
return (ENOMEM);
OpenPOWER on IntegriCloud