Merge branch 'topic/uaccess-ppc' into next
[linux-2.6-microblaze.git] / mm / gup.c
index da3e031..6076df8 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -351,7 +351,8 @@ static struct page *no_page_table(struct vm_area_struct *vma,
         * But we can only make this optimization where a hole would surely
         * be zero-filled if handle_mm_fault() actually did handle it.
         */
-       if ((flags & FOLL_DUMP) && (!vma->vm_ops || !vma->vm_ops->fault))
+       if ((flags & FOLL_DUMP) &&
+                       (vma_is_anonymous(vma) || !vma->vm_ops->fault))
                return ERR_PTR(-EFAULT);
        return NULL;
 }
@@ -1101,7 +1102,7 @@ retry:
                                goto retry;
                        case -EBUSY:
                                ret = 0;
-                               /* FALLTHRU */
+                               fallthrough;
                        case -EFAULT:
                        case -ENOMEM:
                        case -EHWPOISON:
@@ -1325,10 +1326,12 @@ retry:
                 * start trying again otherwise it can loop forever.
                 */
 
-               if (fatal_signal_pending(current))
+               if (fatal_signal_pending(current)) {
+                       if (!pages_done)
+                               pages_done = -EINTR;
                        break;
+               }
 
-               *locked = 1;
                ret = down_read_killable(&mm->mmap_sem);
                if (ret) {
                        BUG_ON(ret > 0);
@@ -1337,6 +1340,7 @@ retry:
                        break;
                }
 
+               *locked = 1;
                ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED,
                                       pages, NULL, locked);
                if (!*locked) {
@@ -1416,7 +1420,7 @@ long populate_vma_page_range(struct vm_area_struct *vma,
         * We want mlock to succeed for regions that have any permissions
         * other than PROT_NONE.
         */
-       if (vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC))
+       if (vma_is_accessible(vma))
                gup_flags |= FOLL_FORCE;
 
        /*
@@ -1676,7 +1680,7 @@ check_again:
                                        list_add_tail(&head->lru, &cma_page_list);
                                        mod_node_page_state(page_pgdat(head),
                                                            NR_ISOLATED_ANON +
-                                                           page_is_file_cache(head),
+                                                           page_is_file_lru(head),
                                                            hpage_nr_pages(head));
                                }
                        }