|
@@ -1310,9 +1310,11 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
|
|
#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
|
|
|
else if (is_swap_pmd(pmd)) {
|
|
|
swp_entry_t entry = pmd_to_swp_entry(pmd);
|
|
|
+ unsigned long offset = swp_offset(entry);
|
|
|
|
|
|
+ offset += (addr & ~PMD_MASK) >> PAGE_SHIFT;
|
|
|
frame = swp_type(entry) |
|
|
|
- (swp_offset(entry) << MAX_SWAPFILES_SHIFT);
|
|
|
+ (offset << MAX_SWAPFILES_SHIFT);
|
|
|
flags |= PM_SWAP;
|
|
|
if (pmd_swp_soft_dirty(pmd))
|
|
|
flags |= PM_SOFT_DIRTY;
|
|
@@ -1332,6 +1334,8 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
|
|
break;
|
|
|
if (pm->show_pfn && (flags & PM_PRESENT))
|
|
|
frame++;
|
|
|
+ else if (flags & PM_SWAP)
|
|
|
+ frame += (1 << MAX_SWAPFILES_SHIFT);
|
|
|
}
|
|
|
spin_unlock(ptl);
|
|
|
return err;
|