@@ -36,6 +36,7 @@
#include <linux/cleancache.h>
#include <linux/shmem_fs.h>
#include <linux/rmap.h>
+#include <linux/sched/mm.h>
#include "internal.h"
#define CREATE_TRACE_POINTS
@@ -3105,6 +3106,7 @@ ssize_t generic_perform_write(struct file *file,
long status = 0;
ssize_t written = 0;
unsigned int flags = 0;
+ unsigned nofs_flags = memalloc_nofs_save();
do {
struct page *page;
@@ -3177,6 +3179,8 @@ ssize_t generic_perform_write(struct file *file,
balance_dirty_pages_ratelimited(mapping);
} while (iov_iter_count(i));
+ memalloc_nofs_restore(nofs_flags);
+
return written ? written : status;
}
EXPORT_SYMBOL(generic_perform_write);