|
@@ -837,9 +837,6 @@ repeat:
|
|
|
if (radix_tree_deref_retry(page))
|
|
|
goto restart;
|
|
|
|
|
|
- if (page->mapping == NULL || page->index != index)
|
|
|
- break;
|
|
|
-
|
|
|
if (!page_cache_get_speculative(page))
|
|
|
goto repeat;
|
|
|
|
|
@@ -849,6 +846,16 @@ repeat:
|
|
|
goto repeat;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * must check mapping and index after taking the ref.
|
|
|
+ * otherwise we can get both false positives and false
|
|
|
+ * negatives, which is just confusing to the caller.
|
|
|
+ */
|
|
|
+ if (page->mapping == NULL || page->index != index) {
|
|
|
+ page_cache_release(page);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
pages[ret] = page;
|
|
|
ret++;
|
|
|
index++;
|