summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_racct.c
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2011-05-03 07:32:58 +0000
committertrasz <trasz@FreeBSD.org>2011-05-03 07:32:58 +0000
commit752ffacc695ca593f052934a2881be57dec92419 (patch)
tree83f996220eb5127d50beee996ac337678876fccc /sys/kern/kern_racct.c
parenta857ffe8345f7868b2fb1f9f4b0606558ecba6ca (diff)
downloadFreeBSD-src-752ffacc695ca593f052934a2881be57dec92419.zip
FreeBSD-src-752ffacc695ca593f052934a2881be57dec92419.tar.gz
Change the way rctl interfaces with jails by introducing prison_racct
structure, which acts as a proxy between them. This makes jail rules persistent, i.e. they can be added before jail gets created, and they don't disappear when the jail gets destroyed.
Diffstat (limited to 'sys/kern/kern_racct.c')
-rw-r--r--sys/kern/kern_racct.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/kern/kern_racct.c b/sys/kern/kern_racct.c
index 5778bfe..98bd9c5 100644
--- a/sys/kern/kern_racct.c
+++ b/sys/kern/kern_racct.c
@@ -313,7 +313,8 @@ racct_add_cred_locked(struct ucred *cred, int resource, uint64_t amount)
racct_alloc_resource(cred->cr_ruidinfo->ui_racct, resource, amount);
for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent)
- racct_alloc_resource(pr->pr_racct, resource, amount);
+ racct_alloc_resource(pr->pr_prison_racct->prr_racct, resource,
+ amount);
racct_alloc_resource(cred->cr_loginclass->lc_racct, resource, amount);
}
@@ -522,7 +523,8 @@ racct_sub_cred_locked(struct ucred *cred, int resource, uint64_t amount)
racct_alloc_resource(cred->cr_ruidinfo->ui_racct, resource, -amount);
for (pr = cred->cr_prison; pr != NULL; pr = pr->pr_parent)
- racct_alloc_resource(pr->pr_racct, resource, -amount);
+ racct_alloc_resource(pr->pr_prison_racct->prr_racct, resource,
+ -amount);
racct_alloc_resource(cred->cr_loginclass->lc_racct, resource, -amount);
}
@@ -669,9 +671,11 @@ racct_proc_ucred_changed(struct proc *p, struct ucred *oldcred,
}
if (newpr != oldpr) {
for (pr = oldpr; pr != NULL; pr = pr->pr_parent)
- racct_sub_racct(pr->pr_racct, p->p_racct);
+ racct_sub_racct(pr->pr_prison_racct->prr_racct,
+ p->p_racct);
for (pr = newpr; pr != NULL; pr = pr->pr_parent)
- racct_add_racct(pr->pr_racct, p->p_racct);
+ racct_add_racct(pr->pr_prison_racct->prr_racct,
+ p->p_racct);
}
mtx_unlock(&racct_lock);
@@ -744,7 +748,7 @@ racct_init(void)
/*
* XXX: Move this somewhere.
*/
- racct_create(&prison0.pr_racct);
+ prison0.pr_prison_racct = prison_racct_find("0");
}
SYSINIT(racct, SI_SUB_RACCT, SI_ORDER_FIRST, racct_init, NULL);
OpenPOWER on IntegriCloud