version 1.133, 2017/05/26 14:21:01 |
version 1.133.16.1, 2020/02/29 20:21:02 |
Line 1164 tmpfs_getpages(void *v) |
|
Line 1164 tmpfs_getpages(void *v) |
|
struct uvm_object *uobj; |
struct uvm_object *uobj; |
|
|
KASSERT(vp->v_type == VREG); |
KASSERT(vp->v_type == VREG); |
KASSERT(mutex_owned(vp->v_interlock)); |
KASSERT(rw_lock_held(vp->v_uobj.vmobjlock)); |
|
|
/* |
/* |
* Currently, PGO_PASTEOF is not supported. |
* Currently, PGO_PASTEOF is not supported. |
*/ |
*/ |
if (vp->v_size <= offset + (centeridx << PAGE_SHIFT)) { |
if (vp->v_size <= offset + (centeridx << PAGE_SHIFT)) { |
if ((flags & PGO_LOCKED) == 0) |
if ((flags & PGO_LOCKED) == 0) |
mutex_exit(vp->v_interlock); |
rw_exit(vp->v_uobj.vmobjlock); |
return EINVAL; |
return EINVAL; |
} |
} |
|
|
Line 1182 tmpfs_getpages(void *v) |
|
Line 1182 tmpfs_getpages(void *v) |
|
if ((flags & PGO_LOCKED) != 0) |
if ((flags & PGO_LOCKED) != 0) |
return EBUSY; |
return EBUSY; |
|
|
if (vdead_check(vp, VDEAD_NOWAIT) != 0) |
mutex_enter(vp->v_interlock); |
|
error = vdead_check(vp, VDEAD_NOWAIT); |
|
mutex_exit(vp->v_interlock); |
|
if (error != 0) |
return ENOENT; |
return ENOENT; |
|
|
node = VP_TO_TMPFS_NODE(vp); |
node = VP_TO_TMPFS_NODE(vp); |
Line 1211 tmpfs_getpages(void *v) |
|
Line 1214 tmpfs_getpages(void *v) |
|
if (pgs) { |
if (pgs) { |
memset(pgs, 0, sizeof(struct vm_pages *) * npages); |
memset(pgs, 0, sizeof(struct vm_pages *) * npages); |
} |
} |
KASSERT(vp->v_interlock == uobj->vmobjlock); |
KASSERT(vp->v_uobj.vmobjlock == uobj->vmobjlock); |
|
|
error = (*uobj->pgops->pgo_get)(uobj, offset, pgs, &npages, centeridx, |
error = (*uobj->pgops->pgo_get)(uobj, offset, pgs, &npages, centeridx, |
access_type, advice, flags | PGO_ALLPAGES); |
access_type, advice, flags | PGO_ALLPAGES); |
Line 1243 tmpfs_putpages(void *v) |
|
Line 1246 tmpfs_putpages(void *v) |
|
struct uvm_object *uobj; |
struct uvm_object *uobj; |
int error; |
int error; |
|
|
KASSERT(mutex_owned(vp->v_interlock)); |
KASSERT(rw_write_held(vp->v_uobj.vmobjlock)); |
|
|
if (vp->v_type != VREG) { |
if (vp->v_type != VREG) { |
mutex_exit(vp->v_interlock); |
rw_exit(vp->v_uobj.vmobjlock); |
return 0; |
return 0; |
} |
} |
|
|
node = VP_TO_TMPFS_NODE(vp); |
node = VP_TO_TMPFS_NODE(vp); |
uobj = node->tn_spec.tn_reg.tn_aobj; |
uobj = node->tn_spec.tn_reg.tn_aobj; |
|
|
KASSERT(vp->v_interlock == uobj->vmobjlock); |
KASSERT(vp->v_uobj.vmobjlock == uobj->vmobjlock); |
error = (*uobj->pgops->pgo_put)(uobj, offlo, offhi, flags); |
error = (*uobj->pgops->pgo_put)(uobj, offlo, offhi, flags); |
|
|
/* XXX mtime */ |
/* XXX mtime */ |