Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/md/md.c
Show First 20 Lines • Show All 1,115 Lines • ▼ Show 20 Lines | if (bp->bio_cmd == BIO_READ) { | ||||
} else if ((bp->bio_flags & BIO_VLIST) != 0) { | } else if ((bp->bio_flags & BIO_VLIST) != 0) { | ||||
physcopyin_vlist(vlist, ma_offs, | physcopyin_vlist(vlist, ma_offs, | ||||
VM_PAGE_TO_PHYS(m) + offs, len); | VM_PAGE_TO_PHYS(m) + offs, len); | ||||
} else { | } else { | ||||
physcopyin(p, VM_PAGE_TO_PHYS(m) + offs, len); | physcopyin(p, VM_PAGE_TO_PHYS(m) + offs, len); | ||||
} | } | ||||
vm_page_valid(m); | vm_page_valid(m); | ||||
if (m->dirty != VM_PAGE_BITS_ALL) { | vm_page_set_dirty(m, true); | ||||
vm_page_dirty(m); | |||||
vm_pager_page_unswapped(m); | |||||
} | |||||
} else if (bp->bio_cmd == BIO_DELETE) { | } else if (bp->bio_cmd == BIO_DELETE) { | ||||
if (len == PAGE_SIZE || vm_page_all_valid(m)) | if (len == PAGE_SIZE || vm_page_all_valid(m)) | ||||
rv = VM_PAGER_OK; | rv = VM_PAGER_OK; | ||||
else | else | ||||
rv = vm_pager_get_pages(sc->object, &m, 1, | rv = vm_pager_get_pages(sc->object, &m, 1, | ||||
NULL, NULL); | NULL, NULL); | ||||
VM_OBJECT_WLOCK(sc->object); | VM_OBJECT_WLOCK(sc->object); | ||||
if (rv == VM_PAGER_ERROR) { | if (rv == VM_PAGER_ERROR) { | ||||
vm_page_free(m); | vm_page_free(m); | ||||
break; | break; | ||||
} else if (rv == VM_PAGER_FAIL) { | } else if (rv == VM_PAGER_FAIL) { | ||||
vm_page_free(m); | vm_page_free(m); | ||||
m = NULL; | m = NULL; | ||||
} else { | } else { | ||||
/* Page is valid. */ | /* Page is valid. */ | ||||
if (len != PAGE_SIZE) { | if (len != PAGE_SIZE) { | ||||
pmap_zero_page_area(m, offs, len); | pmap_zero_page_area(m, offs, len); | ||||
if (m->dirty != VM_PAGE_BITS_ALL) { | vm_page_set_dirty(m, true); | ||||
vm_page_dirty(m); | |||||
vm_pager_page_unswapped(m); | |||||
} | |||||
} else { | } else { | ||||
vm_pager_page_unswapped(m); | vm_pager_page_unswapped(m); | ||||
vm_page_free(m); | vm_page_free(m); | ||||
m = NULL; | m = NULL; | ||||
} | } | ||||
} | } | ||||
} else | } else | ||||
VM_OBJECT_WLOCK(sc->object); | VM_OBJECT_WLOCK(sc->object); | ||||
▲ Show 20 Lines • Show All 1,023 Lines • Show Last 20 Lines |