|
@@ -915,6 +915,21 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
|
|
|
struct inode *inode;
|
|
|
|
|
|
BUG_ON(!PageLocked(page));
|
|
|
+ /*
|
|
|
+ * shmem_backing_dev_info's capabilities prevent regular writeback or
|
|
|
+ * sync from ever calling shmem_writepage; but a stacking filesystem
|
|
|
+ * may use the ->writepage of its underlying filesystem, in which case
|
|
|
+ * we want to do nothing when that underlying filesystem is tmpfs
|
|
|
+ * (writing out to swap is useful as a response to memory pressure, but
|
|
|
+ * of no use to stabilize the data) - just redirty the page, unlock it
|
|
|
+ * and claim success in this case. AOP_WRITEPAGE_ACTIVATE, and the
|
|
|
+ * page_mapped check below, must be avoided unless we're in reclaim.
|
|
|
+ */
|
|
|
+ if (!wbc->for_reclaim) {
|
|
|
+ set_page_dirty(page);
|
|
|
+ unlock_page(page);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
BUG_ON(page_mapped(page));
|
|
|
|
|
|
mapping = page->mapping;
|