if (pte_swp_soft_dirty(pte))
                        flags |= PM_SOFT_DIRTY;
                entry = pte_to_swp_entry(pte);
-               frame = swp_type(entry) |
-                       (swp_offset(entry) << MAX_SWAPFILES_SHIFT);
+               if (pm->show_pfn)
+                       frame = swp_type(entry) |
+                               (swp_offset(entry) << MAX_SWAPFILES_SHIFT);
                flags |= PM_SWAP;
                if (is_migration_entry(entry))
                        page = migration_entry_to_page(entry);
 #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);
+                       unsigned long offset;
 
-                       offset += (addr & ~PMD_MASK) >> PAGE_SHIFT;
-                       frame = swp_type(entry) |
-                               (offset << MAX_SWAPFILES_SHIFT);
+                       if (pm->show_pfn) {
+                               offset = swp_offset(entry) +
+                                       ((addr & ~PMD_MASK) >> PAGE_SHIFT);
+                               frame = swp_type(entry) |
+                                       (offset << MAX_SWAPFILES_SHIFT);
+                       }
                        flags |= PM_SWAP;
                        if (pmd_swp_soft_dirty(pmd))
                                flags |= PM_SOFT_DIRTY;
                        err = add_to_pagemap(addr, &pme, pm);
                        if (err)
                                break;
-                       if (pm->show_pfn && (flags & PM_PRESENT))
-                               frame++;
-                       else if (flags & PM_SWAP)
-                               frame += (1 << MAX_SWAPFILES_SHIFT);
+                       if (pm->show_pfn) {
+                               if (flags & PM_PRESENT)
+                                       frame++;
+                               else if (flags & PM_SWAP)
+                                       frame += (1 << MAX_SWAPFILES_SHIFT);
+                       }
                }
                spin_unlock(ptl);
                return err;