hugetlbfs: copy_page_to_iter() can deal with compound pages
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 23 Jun 2022 21:24:09 +0000 (17:24 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Aug 2022 02:37:26 +0000 (22:37 -0400)
... since April 2021

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/hugetlbfs/inode.c

index 20336cb..40e124a 100644 (file)
@@ -284,35 +284,6 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 }
 #endif
 
-static size_t
-hugetlbfs_read_actor(struct page *page, unsigned long offset,
-                       struct iov_iter *to, unsigned long size)
-{
-       size_t copied = 0;
-       int i, chunksize;
-
-       /* Find which 4k chunk and offset with in that chunk */
-       i = offset >> PAGE_SHIFT;
-       offset = offset & ~PAGE_MASK;
-
-       while (size) {
-               size_t n;
-               chunksize = PAGE_SIZE;
-               if (offset)
-                       chunksize -= offset;
-               if (chunksize > size)
-                       chunksize = size;
-               n = copy_page_to_iter(&page[i], offset, chunksize, to);
-               copied += n;
-               if (n != chunksize)
-                       return copied;
-               offset = 0;
-               size -= chunksize;
-               i++;
-       }
-       return copied;
-}
-
 /*
  * Support for read() - Find the page attached to f_mapping and copy out the
  * data. Its *very* similar to generic_file_buffered_read(), we can't use that
@@ -363,7 +334,7 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to)
                        /*
                         * We have the page, copy it to user space buffer.
                         */
-                       copied = hugetlbfs_read_actor(page, offset, to, nr);
+                       copied = copy_page_to_iter(page, offset, nr, to);
                        put_page(page);
                }
                offset += copied;