We can call try_to_release_page() with PagePrivate off and a valid page->mapping This may cause all sorts of trouble for the filesystem *_releasepage() handlers. XFS bombs out in that case. Lock the page before checking for page private.
Unified · Split
| @@ -393,7 +393,8 @@ void pagevec_strip(struct pagevec *pvec) · 392 unmodified lines | |||
| 393 | struct page *page = pvec->pages[i]; | 393 | struct page *page = pvec->pages[i]; |
| 394 | 394 | ||
| 395 | if (PagePrivate(page) && !TestSetPageLocked(page)) { | 395 | if (PagePrivate(page) && !TestSetPageLocked(page)) { |
| 396 | try_to_release_page(page, 0); | 396 | if (PagePrivate(page)) |
| 397 | try_to_release_page(page, 0); | ||
| 397 | unlock_page(page); | 398 | unlock_page(page); |
| 398 | } | 399 | } |
| 399 | } | 400 | } |