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;
int base, rv;
KASSERT(length >= 0, ("shm_dotruncate: length < 0"));
object = shmfd->shm_object;
VM_OBJECT_WLOCK(object);
if (length == shmfd->shm_size) {
@ -486,7 +487,7 @@ shm_dotruncate(struct shmfd *shmfd, off_t length)
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)
@ -501,8 +502,8 @@ shm_dotruncate(struct shmfd *shmfd, off_t length)
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);