diff options
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 2fe605d..b51987b 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -407,9 +407,6 @@ vm_object_vndeallocate(vm_object_t object) if (object->ref_count == 0) { mp_fixme("Unlocked vflag access."); vp->v_vflag &= ~VV_TEXT; -#ifdef ENABLE_VFS_IOOPT - vm_object_clear_flag(object, OBJ_OPT); -#endif } /* * vrele may need a vop lock @@ -502,10 +499,6 @@ doterm: if (temp) { TAILQ_REMOVE(&temp->shadow_head, object, shadow_list); temp->shadow_count--; -#ifdef ENABLE_VFS_IOOPT - if (temp->ref_count == 0) - vm_object_clear_flag(temp, OBJ_OPT); -#endif temp->generation++; object->backing_object = NULL; } @@ -556,12 +549,6 @@ vm_object_terminate(vm_object_t object) if (object->type == OBJT_VNODE) { struct vnode *vp; -#ifdef ENABLE_VFS_IOOPT - /* - * Freeze optimized copies. - */ - vm_freeze_copyopts(object, 0, object->size); -#endif /* * Clean pages and flush buffers. */ @@ -937,39 +924,6 @@ vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int curgeneration, return(maxf + 1); } -#ifdef ENABLE_VFS_IOOPT -/* - * Same as vm_object_pmap_copy, except range checking really - * works, and is meant for small sections of an object. - * - * This code protects resident pages by making them read-only - * and is typically called on a fork or split when a page - * is converted to copy-on-write. - * - * NOTE: If the page is already at VM_PROT_NONE, calling - * pmap_page_protect will have no effect. - */ -void -vm_object_pmap_copy_1(vm_object_t object, vm_pindex_t start, vm_pindex_t end) -{ - vm_pindex_t idx; - vm_page_t p; - - GIANT_REQUIRED; - - if (object == NULL || (object->flags & OBJ_WRITEABLE) == 0) - return; - vm_page_lock_queues(); - for (idx = start; idx < end; idx++) { - p = vm_page_lookup(object, idx); - if (p == NULL) - continue; - pmap_page_protect(p, VM_PROT_READ); - } - vm_page_unlock_queues(); -} -#endif - /* * vm_object_madvise: * @@ -1852,94 +1806,6 @@ vm_object_set_writeable_dirty(vm_object_t object) } } -#ifdef ENABLE_VFS_IOOPT -/* - * Experimental support for zero-copy I/O - * - * Performs the copy_on_write operations necessary to allow the virtual copies - * into user space to work. This has to be called for write(2) system calls - * from other processes, file unlinking, and file size shrinkage. - */ -void -vm_freeze_copyopts(vm_object_t object, vm_pindex_t froma, vm_pindex_t toa) -{ - int rv; - vm_object_t robject; - vm_pindex_t idx; - - GIANT_REQUIRED; - if ((object == NULL) || - ((object->flags & OBJ_OPT) == 0)) - return; - - if (object->shadow_count > object->ref_count) - panic("vm_freeze_copyopts: sc > rc"); - - while ((robject = TAILQ_FIRST(&object->shadow_head)) != NULL) { - vm_pindex_t bo_pindex; - vm_page_t m_in, m_out; - - bo_pindex = OFF_TO_IDX(robject->backing_object_offset); - - vm_object_reference(robject); - - vm_object_pip_wait(robject, "objfrz"); - - if (robject->ref_count == 1) { - vm_object_deallocate(robject); - continue; - } - - vm_object_pip_add(robject, 1); - - for (idx = 0; idx < robject->size; idx++) { - - m_out = vm_page_grab(robject, idx, - VM_ALLOC_NORMAL | VM_ALLOC_RETRY); - - if (m_out->valid == 0) { - m_in = vm_page_grab(object, bo_pindex + idx, - VM_ALLOC_NORMAL | VM_ALLOC_RETRY); - vm_page_lock_queues(); - if (m_in->valid == 0) { - vm_page_unlock_queues(); - rv = vm_pager_get_pages(object, &m_in, 1, 0); - if (rv != VM_PAGER_OK) { - printf("vm_freeze_copyopts: cannot read page from file: %lx\n", (long)m_in->pindex); - continue; - } - vm_page_lock_queues(); - vm_page_deactivate(m_in); - } - - pmap_remove_all(m_in); - vm_page_unlock_queues(); - pmap_copy_page(m_in, m_out); - vm_page_lock_queues(); - m_out->valid = m_in->valid; - vm_page_dirty(m_out); - vm_page_activate(m_out); - vm_page_wakeup(m_in); - } else - vm_page_lock_queues(); - vm_page_wakeup(m_out); - vm_page_unlock_queues(); - } - - object->shadow_count--; - object->ref_count--; - TAILQ_REMOVE(&object->shadow_head, robject, shadow_list); - robject->backing_object = NULL; - robject->backing_object_offset = 0; - - vm_object_pip_wakeup(robject); - vm_object_deallocate(robject); - } - - vm_object_clear_flag(object, OBJ_OPT); -} -#endif - #include "opt_ddb.h" #ifdef DDB #include <sys/kernel.h> |