Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / infiniband / hw / ipath / ipath_user_pages.c
index 2bb08af..aae24d8 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <linux/mm.h>
 #include <linux/device.h>
+#include <linux/vs_memory.h>
 
 #include "ipath_kernel.h"
 
@@ -71,7 +72,8 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages,
        lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >>
                PAGE_SHIFT;
 
-       if (num_pages > lock_limit) {
+       if (num_pages > lock_limit ||
+               !vx_vmlocked_avail(current->mm, num_pages)) {
                ret = -ENOMEM;
                goto bail;
        }
@@ -88,7 +90,7 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages,
                        goto bail_release;
        }
 
-       current->mm->locked_vm += num_pages;
+       vx_vmlocked_add(current->mm, num_pages);
 
        ret = 0;
        goto bail;
@@ -157,7 +159,7 @@ void ipath_release_user_pages(struct page **p, size_t num_pages)
 
        __ipath_release_user_pages(p, num_pages, 1);
 
-       current->mm->locked_vm -= num_pages;
+       vx_vmlocked_sub(current->mm, num_pages);
 
        up_write(&current->mm->mmap_sem);
 }
@@ -173,7 +175,7 @@ static void user_pages_account(void *ptr)
        struct ipath_user_pages_work *work = ptr;
 
        down_write(&work->mm->mmap_sem);
-       work->mm->locked_vm -= work->num_pages;
+       vx_vmlocked_sub(work->mm, work->num_pages);
        up_write(&work->mm->mmap_sem);
        mmput(work->mm);
        kfree(work);