[PATCH] Fix alignment bug

From: Huang Ying
Date: Tue Oct 23 2018 - 23:24:15 EST


---
include/linux/huge_mm.h | 6 ++----
mm/huge_memory.c | 9 ++++-----
mm/swap_state.c | 2 +-
3 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h
index 96baae08f47c..e7b3527bc493 100644
--- a/include/linux/huge_mm.h
+++ b/include/linux/huge_mm.h
@@ -379,8 +379,7 @@ struct page_vma_mapped_walk;

#ifdef CONFIG_THP_SWAP
extern void __split_huge_swap_pmd(struct vm_area_struct *vma,
- unsigned long haddr,
- pmd_t *pmd);
+ unsigned long addr, pmd_t *pmd);
extern int split_huge_swap_pmd(struct vm_area_struct *vma, pmd_t *pmd,
unsigned long address, pmd_t orig_pmd);
extern int do_huge_pmd_swap_page(struct vm_fault *vmf, pmd_t orig_pmd);
@@ -411,8 +410,7 @@ static inline bool transparent_hugepage_swapin_enabled(
}
#else /* CONFIG_THP_SWAP */
static inline void __split_huge_swap_pmd(struct vm_area_struct *vma,
- unsigned long haddr,
- pmd_t *pmd)
+ unsigned long addr, pmd_t *pmd)
{
}

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index ed64266b63dc..b2af3bff7624 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1731,10 +1731,11 @@ vm_fault_t do_huge_pmd_numa_page(struct vm_fault *vmf, pmd_t pmd)
#ifdef CONFIG_THP_SWAP
/* Convert a PMD swap mapping to a set of PTE swap mappings */
void __split_huge_swap_pmd(struct vm_area_struct *vma,
- unsigned long haddr,
+ unsigned long addr,
pmd_t *pmd)
{
struct mm_struct *mm = vma->vm_mm;
+ unsigned long haddr = addr & HPAGE_PMD_MASK;
pgtable_t pgtable;
pmd_t _pmd;
swp_entry_t entry;
@@ -1772,7 +1773,7 @@ int split_huge_swap_pmd(struct vm_area_struct *vma, pmd_t *pmd,

ptl = pmd_lock(mm, pmd);
if (pmd_same(*pmd, orig_pmd))
- __split_huge_swap_pmd(vma, address & HPAGE_PMD_MASK, pmd);
+ __split_huge_swap_pmd(vma, address, pmd);
else
ret = -ENOENT;
spin_unlock(ptl);
@@ -2013,9 +2014,7 @@ bool madvise_free_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
* swap mapping and operate on the PTEs
*/
if (next - addr != HPAGE_PMD_SIZE) {
- unsigned long haddr = addr & HPAGE_PMD_MASK;
-
- __split_huge_swap_pmd(vma, haddr, pmd);
+ __split_huge_swap_pmd(vma, addr, pmd);
goto out;
}
free_swap_and_cache(entry, HPAGE_PMD_NR);
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 784ad6388da0..fd143ef82351 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -451,7 +451,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
/* May fail (-ENOMEM) if XArray node allocation failed. */
__SetPageLocked(new_page);
__SetPageSwapBacked(new_page);
- err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL);
+ err = add_to_swap_cache(new_page, hentry, gfp_mask & GFP_KERNEL);
if (likely(!err)) {
/* Initiate read into locked page */
SetPageWorkingset(new_page);
--
2.18.1