diff options
Diffstat (limited to 'sys/vm/sg_pager.c')
-rw-r--r-- | sys/vm/sg_pager.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/vm/sg_pager.c b/sys/vm/sg_pager.c index 097039e..92c1857 100644 --- a/sys/vm/sg_pager.c +++ b/sys/vm/sg_pager.c @@ -181,6 +181,10 @@ sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage) /* Construct a new fake page. */ page = vm_page_getfake(paddr, memattr); VM_OBJECT_LOCK(object); + if (vm_page_insert(page, object, offset) != 0) { + vm_page_putfake(page); + return (VM_PAGER_FAIL); + } TAILQ_INSERT_TAIL(&object->un_pager.sgp.sgp_pglist, page, pageq); /* Free the original pages and insert this fake page into the object. */ @@ -189,7 +193,6 @@ sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int reqpage) vm_page_free(m[i]); vm_page_unlock(m[i]); } - vm_page_insert(page, object, offset); m[reqpage] = page; page->valid = VM_PAGE_BITS_ALL; |