block: don't call into the driver for BLKROSET
[linux-2.6-microblaze.git] / mm / gup.c
index 102877e..98eb8e6 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1647,8 +1647,11 @@ check_again:
                /*
                 * drop the above get_user_pages reference.
                 */
-               for (i = 0; i < nr_pages; i++)
-                       put_page(pages[i]);
+               if (gup_flags & FOLL_PIN)
+                       unpin_user_pages(pages, nr_pages);
+               else
+                       for (i = 0; i < nr_pages; i++)
+                               put_page(pages[i]);
 
                if (migrate_pages(&cma_page_list, alloc_migration_target, NULL,
                        (unsigned long)&mtc, MIGRATE_SYNC, MR_CONTIG_RANGE)) {
@@ -1728,8 +1731,11 @@ static long __gup_longterm_locked(struct mm_struct *mm,
                        goto out;
 
                if (check_dax_vmas(vmas_tmp, rc)) {
-                       for (i = 0; i < rc; i++)
-                               put_page(pages[i]);
+                       if (gup_flags & FOLL_PIN)
+                               unpin_user_pages(pages, rc);
+                       else
+                               for (i = 0; i < rc; i++)
+                                       put_page(pages[i]);
                        rc = -EOPNOTSUPP;
                        goto out;
                }