fs: __generic_file_splice_read retry lookup on AOP_TRUNCATED_PAGE
[cascardo/linux.git] / fs / splice.c
index 4cf700d..82bc0d6 100644 (file)
@@ -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;
                        }