[Cluster-devel] [PATCH v4 21/27] mm: clean up error handling in write_one_page

Jan Kara <[email protected]>
Newsgroups com.redhat.cluster-devel,net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-block,org.kernel.vger.linux-btrfs,org.kernel.vger.linux-cifs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kernel.vger.linux-nilfs,org.kernel.vger.linux-xfs,org.kvack.linux-mm
Message-ID <[email protected]>
On Tue 09-05-17 11:49:24, Jeff Layton wrote:
> 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 <[email protected]>

Looks good to me. You can add:

Reviewed-by: Jan Kara <[email protected]>

								Honza

> ---
>  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
> 
> 
-- 
Jan Kara <[email protected]>
SUSE Labs, CR
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.