| 421 | } |
| 422 | |
| 423 | static void |
| 424 | racct_sub_racct(struct racct *dest, const struct racct *src) |
| 425 | { |
| 426 | int i; |
| 427 | |
| 428 | ASSERT_RACCT_ENABLED(); |
| 429 | RACCT_LOCK_ASSERT(); |
| 430 | |
| 431 | /* |
| 432 | * Update resource usage in dest. |
| 433 | */ |
| 434 | for (i = 0; i <= RACCT_MAX; i++) { |
| 435 | if (!RACCT_IS_SLOPPY(i) && !RACCT_IS_DECAYING(i)) { |
| 436 | KASSERT(dest->r_resources[i] >= 0, |
| 437 | ("%s: resource %d propagation meltdown: dest < 0", |
| 438 | __func__, i)); |
| 439 | KASSERT(src->r_resources[i] >= 0, |
| 440 | ("%s: resource %d propagation meltdown: src < 0", |
| 441 | __func__, i)); |
| 442 | KASSERT(src->r_resources[i] <= dest->r_resources[i], |
| 443 | ("%s: resource %d propagation meltdown: src > dest", |
| 444 | __func__, i)); |
| 445 | } |
| 446 | if (RACCT_CAN_DROP(i)) { |
| 447 | dest->r_resources[i] -= src->r_resources[i]; |
| 448 | if (dest->r_resources[i] < 0) |
| 449 | dest->r_resources[i] = 0; |
| 450 | } |
| 451 | } |
| 452 | } |
| 453 | |
| 454 | void |
| 455 | racct_create(struct racct **racctp) |
no outgoing calls
no test coverage detected