summaryrefslogtreecommitdiffstats
path: root/sys/vm/swap_pager.c
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2010-12-02 17:37:16 +0000
committertrasz <trasz@FreeBSD.org>2010-12-02 17:37:16 +0000
commite5fb69509c12904dfc9fb137ed1dbcafc2e86e29 (patch)
treeea2ce0208bf11af89bb5734c7f42ac4669677e31 /sys/vm/swap_pager.c
parent789892d7ed5efe3e04bd964f26650d2043686819 (diff)
downloadFreeBSD-src-e5fb69509c12904dfc9fb137ed1dbcafc2e86e29.zip
FreeBSD-src-e5fb69509c12904dfc9fb137ed1dbcafc2e86e29.tar.gz
Replace pointer to "struct uidinfo" with pointer to "struct ucred"
in "struct vm_object". This is required to make it possible to account for per-jail swap usage. Reviewed by: kib@ Tested by: pho@ Sponsored by: FreeBSD Foundation
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r--sys/vm/swap_pager.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index bea235a..35a6df5 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -174,16 +174,19 @@ int
swap_reserve(vm_ooffset_t incr)
{
- return (swap_reserve_by_uid(incr, curthread->td_ucred->cr_ruidinfo));
+ return (swap_reserve_by_cred(incr, curthread->td_ucred));
}
int
-swap_reserve_by_uid(vm_ooffset_t incr, struct uidinfo *uip)
+swap_reserve_by_cred(vm_ooffset_t incr, struct ucred *cred)
{
vm_ooffset_t r, s;
int res, error;
static int curfail;
static struct timeval lastfail;
+ struct uidinfo *uip;
+
+ uip = cred->cr_ruidinfo;
if (incr & PAGE_MASK)
panic("swap_reserve: & PAGE_MASK");
@@ -249,17 +252,20 @@ swap_reserve_force(vm_ooffset_t incr)
void
swap_release(vm_ooffset_t decr)
{
- struct uidinfo *uip;
+ struct ucred *cred;
PROC_LOCK(curproc);
- uip = curthread->td_ucred->cr_ruidinfo;
- swap_release_by_uid(decr, uip);
+ cred = curthread->td_ucred;
+ swap_release_by_cred(decr, cred);
PROC_UNLOCK(curproc);
}
void
-swap_release_by_uid(vm_ooffset_t decr, struct uidinfo *uip)
+swap_release_by_cred(vm_ooffset_t decr, struct ucred *cred)
{
+ struct uidinfo *uip;
+
+ uip = cred->cr_ruidinfo;
if (decr & PAGE_MASK)
panic("swap_release: & PAGE_MASK");
@@ -579,9 +585,7 @@ swap_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
{
vm_object_t object;
vm_pindex_t pindex;
- struct uidinfo *uip;
- uip = NULL;
pindex = OFF_TO_IDX(offset + PAGE_MASK + size);
if (handle) {
mtx_lock(&Giant);
@@ -595,19 +599,18 @@ swap_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
object = vm_pager_object_lookup(NOBJLIST(handle), handle);
if (object == NULL) {
if (cred != NULL) {
- uip = cred->cr_ruidinfo;
- if (!swap_reserve_by_uid(size, uip)) {
+ if (!swap_reserve_by_cred(size, cred)) {
sx_xunlock(&sw_alloc_sx);
mtx_unlock(&Giant);
return (NULL);
}
- uihold(uip);
+ crhold(cred);
}
object = vm_object_allocate(OBJT_DEFAULT, pindex);
VM_OBJECT_LOCK(object);
object->handle = handle;
if (cred != NULL) {
- object->uip = uip;
+ object->cred = cred;
object->charge = size;
}
swp_pager_meta_build(object, 0, SWAPBLK_NONE);
@@ -617,15 +620,14 @@ swap_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
mtx_unlock(&Giant);
} else {
if (cred != NULL) {
- uip = cred->cr_ruidinfo;
- if (!swap_reserve_by_uid(size, uip))
+ if (!swap_reserve_by_cred(size, cred))
return (NULL);
- uihold(uip);
+ crhold(cred);
}
object = vm_object_allocate(OBJT_DEFAULT, pindex);
VM_OBJECT_LOCK(object);
if (cred != NULL) {
- object->uip = uip;
+ object->cred = cred;
object->charge = size;
}
swp_pager_meta_build(object, 0, SWAPBLK_NONE);
OpenPOWER on IntegriCloud