From 826079065e11513dde878fc2c576fe9a2ca33bbc Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Mon, 4 Aug 2008 13:41:14 -0700 Subject: [PATCH] --- yaml --- r: 107551 b: refs/heads/master c: a477097d9c37c1cf289c7f0257dffcfa42d50197 h: refs/heads/master i: 107549: 2ecab9ac437149857443bafedc04009378ff8ed1 107547: b775822f6f7f13550a308b2ddc64c68c996023e1 107543: 7aceb9a843ce5b9d29ec0809f5b407c11b227dab 107535: ab13dc56cbf5b142b56eb8f81f909afc1332a847 107519: 6a6a436dcd11ecc863eb73befd8f79dd5521f40e v: v3 --- [refs] | 2 +- trunk/mm/memory.c | 16 +++++++++++++--- trunk/mm/mlock.c | 2 -- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index a1eea1ea0eda..e7cc489b70b7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dc329442b9fd365bec95718013586c07ff600c34 +refs/heads/master: a477097d9c37c1cf289c7f0257dffcfa42d50197 diff --git a/trunk/mm/memory.c b/trunk/mm/memory.c index 6793b9c68107..a472bcd4b061 100644 --- a/trunk/mm/memory.c +++ b/trunk/mm/memory.c @@ -2765,16 +2765,26 @@ int make_pages_present(unsigned long addr, unsigned long end) vma = find_vma(current->mm, addr); if (!vma) - return -1; + return -ENOMEM; write = (vma->vm_flags & VM_WRITE) != 0; BUG_ON(addr >= end); BUG_ON(end > vma->vm_end); len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE; ret = get_user_pages(current, current->mm, addr, len, write, 0, NULL, NULL); - if (ret < 0) + if (ret < 0) { + /* + SUS require strange return value to mlock + - invalid addr generate to ENOMEM. + - out of memory should generate EAGAIN. + */ + if (ret == -EFAULT) + ret = -ENOMEM; + else if (ret == -ENOMEM) + ret = -EAGAIN; return ret; - return ret == len ? 0 : -1; + } + return ret == len ? 0 : -ENOMEM; } #if !defined(__HAVE_ARCH_GATE_AREA) diff --git a/trunk/mm/mlock.c b/trunk/mm/mlock.c index 7b2656055d6a..01fbe93eff5c 100644 --- a/trunk/mm/mlock.c +++ b/trunk/mm/mlock.c @@ -78,8 +78,6 @@ static int mlock_fixup(struct vm_area_struct *vma, struct vm_area_struct **prev, mm->locked_vm -= pages; out: - if (ret == -ENOMEM) - ret = -EAGAIN; return ret; }