X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Ffilemap.c;h=88611928e71fc928a89b5b319044d759ea5f612d;hb=d44ed4f86892e350f4b16a3489b7e7c1a9bb7ead;hp=edc54436fa94b84d72119b45e5246149dcec6385;hpb=0abf40c1ac3f25d264c019e1cfe155d590defb87;p=linux-2.6 diff --git a/mm/filemap.c b/mm/filemap.c index edc54436fa..88611928e7 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1504,8 +1504,12 @@ repeat: return -EINVAL; page = filemap_getpage(file, pgoff, nonblock); + + /* XXX: This is wrong, a filesystem I/O error may have happened. Fix that as + * done in shmem_populate calling shmem_getpage */ if (!page && !nonblock) return -ENOMEM; + if (page) { err = install_page(mm, vma, addr, page, prot); if (err) { @@ -1513,6 +1517,9 @@ repeat: return err; } } 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;