[PATCH] shmem_populate: avoid an useless check, and some comments
Either shmem_getpage returns a failure, or it found a page, or it was told it couldn't do any I/O. So it's useless to check nonblock in the else branch. We could add a BUG() there but I preferred to comment the offending function. This was taken out from one Ingo Molnar's old patch I'm resurrecting. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Cc: Ingo Molnar <mingo@elte.hu> Cc: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
0abf40c1ac
commit
d44ed4f868
2 changed files with 12 additions and 1 deletions
|
@ -1504,8 +1504,12 @@ int filemap_populate(struct vm_area_struct *vma, unsigned long addr,
|
|||
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 @@ int filemap_populate(struct vm_area_struct *vma, unsigned long addr,
|
|||
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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue