cifs: set mapping error when page writeback fails in writepage or launder_pages
authorJeff Layton <jlayton@redhat.com>
Thu, 25 May 2017 10:59:52 +0000 (06:59 -0400)
committerSteve French <smfrench@gmail.com>
Thu, 6 Jul 2017 00:51:04 +0000 (19:51 -0500)
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Steve French <smfrench@gmail.com>
fs/cifs/file.c

index fcef70602b278b48ffd74e97f10d2a57b6968cc3..dec70b304269a7fd0807a8791c6b4b9e2c3b6e58 100644 (file)
@@ -2234,14 +2234,16 @@ cifs_writepage_locked(struct page *page, struct writeback_control *wbc)
        set_page_writeback(page);
 retry_write:
        rc = cifs_partialpagewrite(page, 0, PAGE_SIZE);
-       if (rc == -EAGAIN && wbc->sync_mode == WB_SYNC_ALL)
-               goto retry_write;
-       else if (rc == -EAGAIN)
+       if (rc == -EAGAIN) {
+               if (wbc->sync_mode == WB_SYNC_ALL)
+                       goto retry_write;
                redirty_page_for_writepage(wbc, page);
-       else if (rc != 0)
+       } else if (rc != 0) {
                SetPageError(page);
-       else
+               mapping_set_error(page->mapping, rc);
+       } else {
                SetPageUptodate(page);
+       }
        end_page_writeback(page);
        put_page(page);
        free_xid(xid);