diff options
Diffstat (limited to 'mm/mlock.c')
| -rw-r--r-- | mm/mlock.c | 41 |
1 files changed, 0 insertions, 41 deletions
diff --git a/mm/mlock.c b/mm/mlock.c index 8f4e2dfceec1..3f82720e0515 100644 --- a/mm/mlock.c +++ b/mm/mlock.c | |||
| @@ -607,44 +607,3 @@ void user_shm_unlock(size_t size, struct user_struct *user) | |||
| 607 | spin_unlock(&shmlock_user_lock); | 607 | spin_unlock(&shmlock_user_lock); |
| 608 | free_uid(user); | 608 | free_uid(user); |
| 609 | } | 609 | } |
| 610 | |||
| 611 | int account_locked_memory(struct mm_struct *mm, struct rlimit *rlim, | ||
| 612 | size_t size) | ||
| 613 | { | ||
| 614 | unsigned long lim, vm, pgsz; | ||
| 615 | int error = -ENOMEM; | ||
| 616 | |||
| 617 | pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT; | ||
| 618 | |||
| 619 | down_write(&mm->mmap_sem); | ||
| 620 | |||
| 621 | lim = ACCESS_ONCE(rlim[RLIMIT_AS].rlim_cur) >> PAGE_SHIFT; | ||
| 622 | vm = mm->total_vm + pgsz; | ||
| 623 | if (lim < vm) | ||
| 624 | goto out; | ||
| 625 | |||
| 626 | lim = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur) >> PAGE_SHIFT; | ||
| 627 | vm = mm->locked_vm + pgsz; | ||
| 628 | if (lim < vm) | ||
| 629 | goto out; | ||
| 630 | |||
| 631 | mm->total_vm += pgsz; | ||
| 632 | mm->locked_vm += pgsz; | ||
| 633 | |||
| 634 | error = 0; | ||
| 635 | out: | ||
| 636 | up_write(&mm->mmap_sem); | ||
| 637 | return error; | ||
| 638 | } | ||
| 639 | |||
| 640 | void refund_locked_memory(struct mm_struct *mm, size_t size) | ||
| 641 | { | ||
| 642 | unsigned long pgsz = PAGE_ALIGN(size) >> PAGE_SHIFT; | ||
| 643 | |||
| 644 | down_write(&mm->mmap_sem); | ||
| 645 | |||
| 646 | mm->total_vm -= pgsz; | ||
| 647 | mm->locked_vm -= pgsz; | ||
| 648 | |||
| 649 | up_write(&mm->mmap_sem); | ||
| 650 | } | ||
