diff options
Diffstat (limited to 'mm/filemap.c')
| -rw-r--r-- | mm/filemap.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index ca389394fa2a..83a45d35468b 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
| @@ -298,7 +298,7 @@ int filemap_fdatawait_range(struct address_space *mapping, loff_t start_byte, | |||
| 298 | continue; | 298 | continue; |
| 299 | 299 | ||
| 300 | wait_on_page_writeback(page); | 300 | wait_on_page_writeback(page); |
| 301 | if (PageError(page)) | 301 | if (TestClearPageError(page)) |
| 302 | ret = -EIO; | 302 | ret = -EIO; |
| 303 | } | 303 | } |
| 304 | pagevec_release(&pvec); | 304 | pagevec_release(&pvec); |
| @@ -837,9 +837,6 @@ repeat: | |||
| 837 | if (radix_tree_deref_retry(page)) | 837 | if (radix_tree_deref_retry(page)) |
| 838 | goto restart; | 838 | goto restart; |
| 839 | 839 | ||
| 840 | if (page->mapping == NULL || page->index != index) | ||
| 841 | break; | ||
| 842 | |||
| 843 | if (!page_cache_get_speculative(page)) | 840 | if (!page_cache_get_speculative(page)) |
| 844 | goto repeat; | 841 | goto repeat; |
| 845 | 842 | ||
| @@ -849,6 +846,16 @@ repeat: | |||
| 849 | goto repeat; | 846 | goto repeat; |
| 850 | } | 847 | } |
| 851 | 848 | ||
| 849 | /* | ||
| 850 | * must check mapping and index after taking the ref. | ||
| 851 | * otherwise we can get both false positives and false | ||
| 852 | * negatives, which is just confusing to the caller. | ||
| 853 | */ | ||
| 854 | if (page->mapping == NULL || page->index != index) { | ||
| 855 | page_cache_release(page); | ||
| 856 | break; | ||
| 857 | } | ||
| 858 | |||
| 852 | pages[ret] = page; | 859 | pages[ret] = page; |
| 853 | ret++; | 860 | ret++; |
| 854 | index++; | 861 | index++; |
| @@ -2220,7 +2227,7 @@ struct page *grab_cache_page_write_begin(struct address_space *mapping, | |||
| 2220 | gfp_notmask = __GFP_FS; | 2227 | gfp_notmask = __GFP_FS; |
| 2221 | repeat: | 2228 | repeat: |
| 2222 | page = find_lock_page(mapping, index); | 2229 | page = find_lock_page(mapping, index); |
| 2223 | if (likely(page)) | 2230 | if (page) |
| 2224 | return page; | 2231 | return page; |
| 2225 | 2232 | ||
| 2226 | page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask); | 2233 | page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask); |
