Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1170379AbdDXN2z (ORCPT ); Mon, 24 Apr 2017 09:28:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42882 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1170868AbdDXNYd (ORCPT ); Mon, 24 Apr 2017 09:24:33 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4358DC05975C Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jlayton@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4358DC05975C From: Jeff Layton To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-ext4@vger.kernel.org, linux-cifs@vger.kernel.org, linux-mm@kvack.org, jfs-discussion@lists.sourceforge.net, linux-xfs@vger.kernel.org, cluster-devel@redhat.com, linux-f2fs-devel@lists.sourceforge.net, v9fs-developer@lists.sourceforge.net, osd-dev@open-osd.org, linux-nilfs@vger.kernel.org, linux-block@vger.kernel.org Cc: dhowells@redhat.com, akpm@linux-foundation.org, hch@infradead.org, ross.zwisler@linux.intel.com, mawilcox@microsoft.com, jack@suse.com, viro@zeniv.linux.org.uk, corbet@lwn.net, neilb@suse.de, clm@fb.com, tytso@mit.edu, axboe@kernel.dk Subject: [PATCH v3 18/20] mm: clean up error handling in write_one_page Date: Mon, 24 Apr 2017 09:22:57 -0400 Message-Id: <20170424132259.8680-19-jlayton@redhat.com> In-Reply-To: <20170424132259.8680-1-jlayton@redhat.com> References: <20170424132259.8680-1-jlayton@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Mon, 24 Apr 2017 13:24:32 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1412 Lines: 51 Don't try to check PageError since that's potentially racy and not necessarily going to be set after writepage errors out. Instead, sample the mapping error early on, and use that value to tell us whether we got a writeback error since then. Signed-off-by: Jeff Layton --- mm/page-writeback.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index de0dbf12e2c1..1643456881b4 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2373,11 +2373,12 @@ int do_writepages(struct address_space *mapping, struct writeback_control *wbc) int write_one_page(struct page *page) { struct address_space *mapping = page->mapping; - int ret = 0; + int ret = 0, ret2; struct writeback_control wbc = { .sync_mode = WB_SYNC_ALL, .nr_to_write = 1, }; + errseq_t since = filemap_sample_wb_error(mapping); BUG_ON(!PageLocked(page)); @@ -2386,16 +2387,14 @@ int write_one_page(struct page *page) if (clear_page_dirty_for_io(page)) { get_page(page); ret = mapping->a_ops->writepage(page, &wbc); - if (ret == 0) { + if (ret == 0) wait_on_page_writeback(page); - if (PageError(page)) - ret = -EIO; - } put_page(page); } else { unlock_page(page); } - return ret; + ret2 = filemap_check_wb_error(mapping, since); + return ret ? : ret2; } EXPORT_SYMBOL(write_one_page); -- 2.9.3