Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vnode_pager.c
Show First 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
static int vnode_pager_getpages_async(vm_object_t, vm_page_t *, int, int *, | static int vnode_pager_getpages_async(vm_object_t, vm_page_t *, int, int *, | ||||
int *, vop_getpages_iodone_t, void *); | int *, vop_getpages_iodone_t, void *); | ||||
static void vnode_pager_putpages(vm_object_t, vm_page_t *, int, int, int *); | static void vnode_pager_putpages(vm_object_t, vm_page_t *, int, int, int *); | ||||
static boolean_t vnode_pager_haspage(vm_object_t, vm_pindex_t, int *, int *); | static boolean_t vnode_pager_haspage(vm_object_t, vm_pindex_t, int *, int *); | ||||
static vm_object_t vnode_pager_alloc(void *, vm_ooffset_t, vm_prot_t, | static vm_object_t vnode_pager_alloc(void *, vm_ooffset_t, vm_prot_t, | ||||
vm_ooffset_t, struct ucred *cred); | vm_ooffset_t, struct ucred *cred); | ||||
static int vnode_pager_generic_getpages_done(struct buf *); | static int vnode_pager_generic_getpages_done(struct buf *); | ||||
static void vnode_pager_generic_getpages_done_async(struct buf *); | static void vnode_pager_generic_getpages_done_async(struct buf *); | ||||
static void vnode_pager_update_writecount(vm_object_t, vm_offset_t, | |||||
vm_offset_t); | |||||
static void vnode_pager_release_writecount(vm_object_t, vm_offset_t, | |||||
vm_offset_t); | |||||
struct pagerops vnodepagerops = { | struct pagerops vnodepagerops = { | ||||
.pgo_alloc = vnode_pager_alloc, | .pgo_alloc = vnode_pager_alloc, | ||||
.pgo_dealloc = vnode_pager_dealloc, | .pgo_dealloc = vnode_pager_dealloc, | ||||
.pgo_getpages = vnode_pager_getpages, | .pgo_getpages = vnode_pager_getpages, | ||||
.pgo_getpages_async = vnode_pager_getpages_async, | .pgo_getpages_async = vnode_pager_getpages_async, | ||||
.pgo_putpages = vnode_pager_putpages, | .pgo_putpages = vnode_pager_putpages, | ||||
.pgo_haspage = vnode_pager_haspage, | .pgo_haspage = vnode_pager_haspage, | ||||
.pgo_update_writecount = vnode_pager_update_writecount, | |||||
.pgo_release_writecount = vnode_pager_release_writecount, | |||||
}; | }; | ||||
static struct domainset *vnode_domainset = NULL; | static struct domainset *vnode_domainset = NULL; | ||||
SYSCTL_PROC(_debug, OID_AUTO, vnode_domainset, CTLTYPE_STRING | CTLFLAG_RW, | SYSCTL_PROC(_debug, OID_AUTO, vnode_domainset, CTLTYPE_STRING | CTLFLAG_RW, | ||||
&vnode_domainset, 0, sysctl_handle_domainset, "A", | &vnode_domainset, 0, sysctl_handle_domainset, "A", | ||||
"Default vnode NUMA policy"); | "Default vnode NUMA policy"); | ||||
▲ Show 20 Lines • Show All 1,376 Lines • ▼ Show 20 Lines | if (pos != trunc_page(pos)) { | ||||
rtvals[i] = VM_PAGER_BAD; | rtvals[i] = VM_PAGER_BAD; | ||||
pos += PAGE_SIZE; | pos += PAGE_SIZE; | ||||
} | } | ||||
} | } | ||||
done: | done: | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
} | } | ||||
void | static void | ||||
vnode_pager_update_writecount(vm_object_t object, vm_offset_t start, | vnode_pager_update_writecount(vm_object_t object, vm_offset_t start, | ||||
vm_offset_t end) | vm_offset_t end) | ||||
{ | { | ||||
struct vnode *vp; | struct vnode *vp; | ||||
vm_ooffset_t old_wm; | vm_ooffset_t old_wm; | ||||
VM_OBJECT_WLOCK(object); | VM_OBJECT_WLOCK(object); | ||||
if (object->type != OBJT_VNODE) { | if (object->type != OBJT_VNODE) { | ||||
Show All 12 Lines | if (old_wm == 0 && object->un_pager.vnp.writemappings != 0) { | ||||
ASSERT_VOP_LOCKED(vp, "v_writecount dec"); | ASSERT_VOP_LOCKED(vp, "v_writecount dec"); | ||||
VOP_ADD_WRITECOUNT_CHECKED(vp, -1); | VOP_ADD_WRITECOUNT_CHECKED(vp, -1); | ||||
CTR3(KTR_VFS, "%s: vp %p v_writecount decreased to %d", | CTR3(KTR_VFS, "%s: vp %p v_writecount decreased to %d", | ||||
__func__, vp, vp->v_writecount); | __func__, vp, vp->v_writecount); | ||||
} | } | ||||
VM_OBJECT_WUNLOCK(object); | VM_OBJECT_WUNLOCK(object); | ||||
} | } | ||||
void | static void | ||||
vnode_pager_release_writecount(vm_object_t object, vm_offset_t start, | vnode_pager_release_writecount(vm_object_t object, vm_offset_t start, | ||||
vm_offset_t end) | vm_offset_t end) | ||||
{ | { | ||||
struct vnode *vp; | struct vnode *vp; | ||||
struct mount *mp; | struct mount *mp; | ||||
vm_offset_t inc; | vm_offset_t inc; | ||||
VM_OBJECT_WLOCK(object); | VM_OBJECT_WLOCK(object); | ||||
Show All 40 Lines |