From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Goldwyn Rodrigues To: linux-fsdevel@vger.kernel.org Cc: linux-mm@kvack.org, willy@infradead.org, david@fromorbit.com, Goldwyn Rodrigues Subject: [PATCH 3/3] fs: Use memalloc_nofs_save in generic_perform_write Date: Wed, 21 Mar 2018 17:44:29 -0500 Message-Id: <20180321224429.15860-4-rgoldwyn@suse.de> In-Reply-To: <20180321224429.15860-1-rgoldwyn@suse.de> References: <20180321224429.15860-1-rgoldwyn@suse.de> Sender: owner-linux-mm@kvack.org List-ID: From: Goldwyn Rodrigues Perform generic_perform_write() under memalloc_nofs because any allocations should not recurse into fs writebacks. This covers grab and write cache pages, Signed-off-by: Goldwyn Rodrigues --- mm/filemap.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/filemap.c b/mm/filemap.c index 3c9ead9a1e32..5fe54614c69f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -36,6 +36,7 @@ #include #include #include +#include #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); -- 2.16.2