The gfp flags are currently set to __GPF_HIGHMEM, which doesn't allow
for any reclaim. Make this more resilient by or'ing that with
GFP_KERNEL. Also, get rid of the goto and unify the exit codepath.

Signed-off-by: Jeff Layton <[email protected]>
---
 fs/cifs/file.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index febf32e..6afa40f 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2001,7 +2001,7 @@ cifs_write_allocate_pages(struct page **pages, unsigned 
long num_pages)
        unsigned long i;
 
        for (i = 0; i < num_pages; i++) {
-               pages[i] = alloc_page(__GFP_HIGHMEM);
+               pages[i] = alloc_page(GFP_KERNEL|__GFP_HIGHMEM);
                if (!pages[i]) {
                        /*
                         * save number of pages we have already allocated and
@@ -2009,15 +2009,14 @@ cifs_write_allocate_pages(struct page **pages, unsigned 
long num_pages)
                         */
                        num_pages = i;
                        rc = -ENOMEM;
-                       goto error;
+                       break;
                }
        }
 
-       return rc;
-
-error:
-       for (i = 0; i < num_pages; i++)
-               put_page(pages[i]);
+       if (rc) {
+               for (i = 0; i < num_pages; i++)
+                       put_page(pages[i]);
+       }
        return rc;
 }
 
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to