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:
parent
9c2aa0a0a3
commit
2a016de1a5
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user