Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/md/md.c
Show First 20 Lines • Show All 1,555 Lines • ▼ Show 20 Lines | mdresize(struct md_s *sc, struct md_req *mdr) | ||||
switch (sc->type) { | switch (sc->type) { | ||||
case MD_VNODE: | case MD_VNODE: | ||||
case MD_NULL: | case MD_NULL: | ||||
break; | break; | ||||
case MD_SWAP: | 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(sc->mediasize); | ||||
newpages = OFF_TO_IDX(round_page(mdr->md_mediasize)); | newpages = OFF_TO_IDX(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_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); | ||||
▲ Show 20 Lines • Show All 599 Lines • Show Last 20 Lines |