Commit f2deae9d authored by Mel Gorman's avatar Mel Gorman Committed by Linus Torvalds

Remove implementation of readpage from the hugetlbfs_aops

The core VM assumes the page size used by the address_space in
inode->i_mapping is PAGE_SIZE but hugetlbfs breaks this assumption by
inserting pages into the page cache at offsets the core VM considers
unexpected.

This would not be a problem except that hugetlbfs also provide a
->readpage implementation.  As it exists, the core VM can assume the
base page size is being used, allocate pages on behalf of the
filesystem, insert them into the page cache and call ->readpage to
populate them.  These pages are the wrong size and at the wrong offset
for hugetlbfs causing confusion.

This patch deletes the ->readpage implementation for hugetlbfs on the
grounds the core VM should not be allocating and populating pages on
behalf of hugetlbfs.  There should be no existing users of the
->readpage implementation so it should not cause a regression.
Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a4f1cb9f
...@@ -312,16 +312,6 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf, ...@@ -312,16 +312,6 @@ static ssize_t hugetlbfs_read(struct file *filp, char __user *buf,
return retval; return retval;
} }
/*
* Read a page. Again trivial. If it didn't already exist
* in the page cache, it is zero-filled.
*/
static int hugetlbfs_readpage(struct file *file, struct page * page)
{
unlock_page(page);
return -EINVAL;
}
static int hugetlbfs_write_begin(struct file *file, static int hugetlbfs_write_begin(struct file *file,
struct address_space *mapping, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
...@@ -701,7 +691,6 @@ static void hugetlbfs_destroy_inode(struct inode *inode) ...@@ -701,7 +691,6 @@ static void hugetlbfs_destroy_inode(struct inode *inode)
} }
static const struct address_space_operations hugetlbfs_aops = { static const struct address_space_operations hugetlbfs_aops = {
.readpage = hugetlbfs_readpage,
.write_begin = hugetlbfs_write_begin, .write_begin = hugetlbfs_write_begin,
.write_end = hugetlbfs_write_end, .write_end = hugetlbfs_write_end,
.set_page_dirty = hugetlbfs_set_page_dirty, .set_page_dirty = hugetlbfs_set_page_dirty,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment