|
@@ -415,6 +415,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
|
|
|
*/
|
|
|
if (!page->mapping) {
|
|
|
unlock_page(page);
|
|
|
+retry_lookup:
|
|
|
page = find_or_create_page(mapping, index,
|
|
|
mapping_gfp_mask(mapping));
|
|
|
|
|
@@ -439,13 +440,10 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,
|
|
|
error = mapping->a_ops->readpage(in, page);
|
|
|
if (unlikely(error)) {
|
|
|
/*
|
|
|
- * We really should re-lookup the page here,
|
|
|
- * but it complicates things a lot. Instead
|
|
|
- * lets just do what we already stored, and
|
|
|
- * we'll get it the next time we are called.
|
|
|
+ * Re-lookup the page
|
|
|
*/
|
|
|
if (error == AOP_TRUNCATED_PAGE)
|
|
|
- error = 0;
|
|
|
+ goto retry_lookup;
|
|
|
|
|
|
break;
|
|
|
}
|