tmpfs: restore missing clear_highpage
tmpfs was misconverted to __GFP_ZERO in 2.6.11. There's an unusual case in which shmem_getpage receives the page from its caller instead of allocating. We must cover this case by clear_highpage before SetPageUptodate, as before. Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
9bfb52ad71
commit
e84e2e132c
@@ -1072,7 +1072,7 @@ shmem_alloc_page(gfp_t gfp, struct shmem_inode_info *info,
|
|||||||
pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, idx);
|
pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, idx);
|
||||||
pvma.vm_pgoff = idx;
|
pvma.vm_pgoff = idx;
|
||||||
pvma.vm_end = PAGE_SIZE;
|
pvma.vm_end = PAGE_SIZE;
|
||||||
page = alloc_page_vma(gfp | __GFP_ZERO, &pvma, 0);
|
page = alloc_page_vma(gfp, &pvma, 0);
|
||||||
mpol_free(pvma.vm_policy);
|
mpol_free(pvma.vm_policy);
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
@@ -1093,7 +1093,7 @@ shmem_swapin(struct shmem_inode_info *info,swp_entry_t entry,unsigned long idx)
|
|||||||
static inline struct page *
|
static inline struct page *
|
||||||
shmem_alloc_page(gfp_t gfp,struct shmem_inode_info *info, unsigned long idx)
|
shmem_alloc_page(gfp_t gfp,struct shmem_inode_info *info, unsigned long idx)
|
||||||
{
|
{
|
||||||
return alloc_page(gfp | __GFP_ZERO);
|
return alloc_page(gfp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1306,6 +1306,7 @@ repeat:
|
|||||||
|
|
||||||
info->alloced++;
|
info->alloced++;
|
||||||
spin_unlock(&info->lock);
|
spin_unlock(&info->lock);
|
||||||
|
clear_highpage(filepage);
|
||||||
flush_dcache_page(filepage);
|
flush_dcache_page(filepage);
|
||||||
SetPageUptodate(filepage);
|
SetPageUptodate(filepage);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user