X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fshmem.c;h=08a3bc2fba61897dab763b687c926d44ca6fde0a;hb=d44ed4f86892e350f4b16a3489b7e7c1a9bb7ead;hp=5a81b1ee4f7a43fc972d7ec762f2d51d7ac8aa42;hpb=975f957dc408925805dd8f5aa4217b7eeea2d005;p=linux-2.6 diff --git a/mm/shmem.c b/mm/shmem.c index 5a81b1ee4f..08a3bc2fba 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1195,6 +1195,7 @@ static int shmem_populate(struct vm_area_struct *vma, err = shmem_getpage(inode, pgoff, &page, sgp, NULL); if (err) return err; + /* Page may still be null, but only if nonblock was set. */ if (page) { mark_page_accessed(page); err = install_page(mm, vma, addr, page, prot); @@ -1202,7 +1203,10 @@ static int shmem_populate(struct vm_area_struct *vma, page_cache_release(page); return err; } - } else if (nonblock) { + } else { + /* No page was found just because we can't read it in + * now (being here implies nonblock != 0), but the page + * may exist, so set the PTE to fault it in later. */ err = install_file_pte(mm, vma, addr, pgoff, prot); if (err) return err;