Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/md/md.c
Show First 20 Lines • Show All 1,560 Lines • ▼ Show 20 Lines | case MD_SWAP: | ||||
if (mdr->md_mediasize <= 0 || | if (mdr->md_mediasize <= 0 || | ||||
(mdr->md_mediasize % PAGE_SIZE) != 0) | (mdr->md_mediasize % PAGE_SIZE) != 0) | ||||
return (EDOM); | return (EDOM); | ||||
oldpages = OFF_TO_IDX(round_page(sc->mediasize)); | oldpages = OFF_TO_IDX(round_page(sc->mediasize)); | ||||
newpages = OFF_TO_IDX(round_page(mdr->md_mediasize)); | newpages = OFF_TO_IDX(round_page(mdr->md_mediasize)); | ||||
if (newpages < oldpages) { | if (newpages < oldpages) { | ||||
VM_OBJECT_WLOCK(sc->object); | VM_OBJECT_WLOCK(sc->object); | ||||
vm_object_page_remove(sc->object, newpages, 0, 0); | vm_object_page_remove(sc->object, newpages, 0, 0); | ||||
swap_pager_freespace(sc->object, newpages, | |||||
oldpages - newpages); | |||||
swap_release_by_cred(IDX_TO_OFF(oldpages - | swap_release_by_cred(IDX_TO_OFF(oldpages - | ||||
newpages), sc->cred); | newpages), sc->cred); | ||||
sc->object->charge = IDX_TO_OFF(newpages); | sc->object->charge = IDX_TO_OFF(newpages); | ||||
sc->object->size = newpages; | sc->object->size = newpages; | ||||
VM_OBJECT_WUNLOCK(sc->object); | VM_OBJECT_WUNLOCK(sc->object); | ||||
} else if (newpages > oldpages) { | } else if (newpages > oldpages) { | ||||
res = swap_reserve_by_cred(IDX_TO_OFF(newpages - | res = swap_reserve_by_cred(IDX_TO_OFF(newpages - | ||||
oldpages), sc->cred); | oldpages), sc->cred); | ||||
▲ Show 20 Lines • Show All 596 Lines • Show Last 20 Lines |