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 | 393 | struct page *page = pvec->pages[i]; |
| 394 | 394 | |
| 395 | 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 | 398 | unlock_page(page); |
| 398 | 399 | } |
| 399 | 400 | } |