diff -Naur linux-2.5.46/fs/binfmt_elf.c linux-2.5.46-ioe/fs/binfmt_elf.c --- linux-2.5.46/fs/binfmt_elf.c Tue Nov 5 21:32:53 2002 +++ linux-2.5.46-ioe/fs/binfmt_elf.c Wed Nov 6 20:47:16 2002 @@ -1245,10 +1245,11 @@ addr < vma->vm_end; addr += PAGE_SIZE) { struct page* page; - struct vm_area_struct *vma; + + page = get_one_user_page(current, + current->mm, vma, addr, 1, 0); - if (get_user_pages(current, current->mm, addr, 1, 0, 1, - &page, &vma) <= 0) { + if (IS_ERR(page)) { DUMP_SEEK (file->f_pos + PAGE_SIZE); } else { if (page == ZERO_PAGE(addr)) { diff -Naur linux-2.5.46/kernel/futex.c linux-2.5.46-ioe/kernel/futex.c --- linux-2.5.46/kernel/futex.c Sat Oct 19 06:01:18 2002 +++ linux-2.5.46-ioe/kernel/futex.c Wed Nov 6 14:57:45 2002 @@ -108,8 +108,8 @@ static struct page *__pin_page(unsigned long addr) { struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; struct page *page, *tmp; - int err; /* * Do a quick atomic lookup first - this is the fastpath. @@ -129,12 +129,13 @@ unlock_futex_mm(); down_read(&mm->mmap_sem); - err = get_user_pages(current, mm, addr, 1, 0, 0, &page, NULL); + vma = find_extend_vma(mm, addr); + page = get_one_user_page(current, mm, vma, addr, 1, 0); up_read(&mm->mmap_sem); lock_futex_mm(); - if (err < 0) + if (IS_ERR(page)) return NULL; /* * Since the faulting happened with locks released, we have to diff -Naur linux-2.5.46/kernel/ptrace.c linux-2.5.46-ioe/kernel/ptrace.c --- linux-2.5.46/kernel/ptrace.c Tue Nov 5 21:32:53 2002 +++ linux-2.5.46-ioe/kernel/ptrace.c Wed Nov 6 15:41:12 2002 @@ -163,12 +163,16 @@ down_read(&mm->mmap_sem); /* ignore errors, just check how much was sucessfully transfered */ while (len) { - int bytes, ret, offset; + int bytes, offset; void *maddr; - ret = get_user_pages(current, mm, addr, 1, - write, 1, &page, &vma); - if (ret <= 0) + /* TODO: This whole function could be optimized, + * by doing the whole stuff of this loop + * in a custom page walker using walk_user_pages(). -ioe + */ + vma = find_extend_vma(mm, addr); + page = get_one_user_page(current, mm, vma, addr, write, 1); + if (IS_ERR(page)) break; bytes = len;