Skip to content

Commit

Permalink
hugetlbfs: copy_page_to_iter() can deal with compound pages
Browse files Browse the repository at this point in the history
... since April 2021

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Aug 9, 2022
1 parent f0f6b61 commit c7d57ab
Showing 1 changed file with 1 addition and 30 deletions.
31 changes: 1 addition & 30 deletions fs/hugetlbfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit c7d57ab

Please sign in to comment.