X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fmlock.c;h=4d3fea267e0dabde457091a2618a0efe8dba864d;hb=4cc21505a09354ade787de368bd697a1bba3b213;hp=b90c59573abf5da8bd00dcc7b224796ce66befc5;hpb=0825788ff27c7145e9d558cb2a26f3837d1f9be5;p=linux-2.6 diff --git a/mm/mlock.c b/mm/mlock.c index b90c59573a..4d3fea267e 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -10,7 +10,18 @@ #include #include #include +#include +#include +int can_do_mlock(void) +{ + if (capable(CAP_IPC_LOCK)) + return 1; + if (current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur != 0) + return 1; + return 0; +} +EXPORT_SYMBOL(can_do_mlock); static int mlock_fixup(struct vm_area_struct *vma, struct vm_area_struct **prev, unsigned long start, unsigned long end, unsigned int newflags) @@ -65,7 +76,7 @@ success: ret = make_pages_present(start, end); } - vma->vm_mm->locked_vm -= pages; + mm->locked_vm -= pages; out: if (ret == -ENOMEM) ret = -EAGAIN;