diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index fa31c8d2c095589b379b32f77d469f24366a1763..a55580f4e611252968e44bd6b5563187b5328425 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2367,6 +2367,8 @@ int end_extent_writepage(struct page *page, int err, u64 start, u64 end)
 	if (!uptodate) {
 		ClearPageUptodate(page);
 		SetPageError(page);
+		ret = ret < 0 ? ret : -EIO;
+		mapping_set_error(page->mapping, ret);
 	}
 	return 0;
 }