diff options
Diffstat (limited to 'fs/proc/task_mmu.c')
| -rw-r--r-- | fs/proc/task_mmu.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 65ae54659833..c486ad4b43f0 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -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;  |