* Handle jail renaming. From the racct point of view, renaming means * moving from one prison_racct to another. */
| 4315 | * moving from one prison_racct to another. |
| 4316 | */ |
| 4317 | static void |
| 4318 | prison_racct_modify(struct prison *pr) |
| 4319 | { |
| 4320 | #ifdef RCTL |
| 4321 | struct proc *p; |
| 4322 | struct ucred *cred; |
| 4323 | #endif |
| 4324 | struct prison_racct *oldprr; |
| 4325 | |
| 4326 | ASSERT_RACCT_ENABLED(); |
| 4327 | |
| 4328 | sx_slock(&allproc_lock); |
| 4329 | sx_xlock(&allprison_lock); |
| 4330 | |
| 4331 | if (strcmp(pr->pr_name, pr->pr_prison_racct->prr_name) == 0) { |
| 4332 | sx_xunlock(&allprison_lock); |
| 4333 | sx_sunlock(&allproc_lock); |
| 4334 | return; |
| 4335 | } |
| 4336 | |
| 4337 | oldprr = pr->pr_prison_racct; |
| 4338 | pr->pr_prison_racct = NULL; |
| 4339 | |
| 4340 | prison_racct_attach(pr); |
| 4341 | |
| 4342 | /* |
| 4343 | * Move resource utilisation records. |
| 4344 | */ |
| 4345 | racct_move(pr->pr_prison_racct->prr_racct, oldprr->prr_racct); |
| 4346 | |
| 4347 | #ifdef RCTL |
| 4348 | /* |
| 4349 | * Force rctl to reattach rules to processes. |
| 4350 | */ |
| 4351 | FOREACH_PROC_IN_SYSTEM(p) { |
| 4352 | PROC_LOCK(p); |
| 4353 | cred = crhold(p->p_ucred); |
| 4354 | PROC_UNLOCK(p); |
| 4355 | rctl_proc_ucred_changed(p, cred); |
| 4356 | crfree(cred); |
| 4357 | } |
| 4358 | #endif |
| 4359 | |
| 4360 | sx_sunlock(&allproc_lock); |
| 4361 | prison_racct_free_locked(oldprr); |
| 4362 | sx_xunlock(&allprison_lock); |
| 4363 | } |
| 4364 | |
| 4365 | static void |
| 4366 | prison_racct_detach(struct prison *pr) |
no test coverage detected