|
@@ -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;
|