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.

Reviewed by:	kib
MFC after:	1 week
This commit is contained in:
Alan Cox 2017-03-20 05:15:55 +00:00
parent 9c2aa0a0a3
commit 2a016de1a5

View File

@ -418,6 +418,7 @@ shm_dotruncate(struct shmfd *shmfd, off_t length)
vm_ooffset_t delta; vm_ooffset_t delta;
int base, rv; int base, rv;
KASSERT(length >= 0, ("shm_dotruncate: length < 0"));
object = shmfd->shm_object; object = shmfd->shm_object;
VM_OBJECT_WLOCK(object); VM_OBJECT_WLOCK(object);
if (length == shmfd->shm_size) { if (length == shmfd->shm_size) {
@ -486,7 +487,7 @@ retry:
vm_pager_page_unswapped(m); vm_pager_page_unswapped(m);
} }
} }
delta = ptoa(object->size - nobjsize); delta = IDX_TO_OFF(object->size - nobjsize);
/* Toss in memory pages. */ /* Toss in memory pages. */
if (nobjsize < object->size) if (nobjsize < object->size)
@ -501,8 +502,8 @@ retry:
swap_release_by_cred(delta, object->cred); swap_release_by_cred(delta, object->cred);
object->charge -= delta; object->charge -= delta;
} else { } else {
/* Attempt to reserve the swap */ /* Try to reserve additional swap space. */
delta = ptoa(nobjsize - object->size); delta = IDX_TO_OFF(nobjsize - object->size);
if (!swap_reserve_by_cred(delta, object->cred)) { if (!swap_reserve_by_cred(delta, object->cred)) {
VM_OBJECT_WUNLOCK(object); VM_OBJECT_WUNLOCK(object);
return (ENOMEM); return (ENOMEM);