struct pagemapread *pm = private;
pte_t *pte;
int err;
+ unsigned long pfn;
pte = pte_offset_map(pmd, addr);
for (; addr != end; pte++, addr += PAGE_SIZE) {
if (addr < pm->next)
continue;
- if (!pte_present(*pte))
- err = add_to_pagemap(addr, -1, pm);
- else
- err = add_to_pagemap(addr, pte_pfn(*pte), pm);
+ pfn = -1;
+ if (pte_present(*pte)) {
+ pfn = pte_pfn(*pte);
+ if (!pfn_valid(pfn))
+ pfn = -1;
+ }
+ err = add_to_pagemap(addr, pfn, pm);
if (err)
return err;
}