| 351 | } |
| 352 | |
| 353 | void |
| 354 | swap_release_by_cred(vm_ooffset_t decr, struct ucred *cred) |
| 355 | { |
| 356 | u_long pdecr; |
| 357 | #ifdef INVARIANTS |
| 358 | u_long prev; |
| 359 | #endif |
| 360 | |
| 361 | KASSERT((decr & PAGE_MASK) == 0, ("%s: decr: %ju & PAGE_MASK", __func__, |
| 362 | (uintmax_t)decr)); |
| 363 | |
| 364 | pdecr = atop(decr); |
| 365 | #ifdef INVARIANTS |
| 366 | prev = atomic_fetchadd_long(&swap_reserved, -pdecr); |
| 367 | KASSERT(prev >= pdecr, ("swap_reserved < decr")); |
| 368 | #else |
| 369 | atomic_subtract_long(&swap_reserved, pdecr); |
| 370 | #endif |
| 371 | |
| 372 | swap_release_by_cred_rlimit(pdecr, cred); |
| 373 | #ifdef RACCT |
| 374 | if (racct_enable) |
| 375 | racct_sub_cred(cred, RACCT_SWAP, decr); |
| 376 | #endif |
| 377 | } |
| 378 | |
| 379 | static int swap_pager_full = 2; /* swap space exhaustion (task killing) */ |
| 380 | static int swap_pager_almost_full = 1; /* swap space exhaustion (w/hysteresis)*/ |
no test coverage detected