diff --git a/fs/buffer.c b/fs/buffer.c
index 7db24b9e54490b82f8201cda70d25afb6424d38a..3b226f7d96969d166aabbae758fa073c81d478ec 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -1727,6 +1727,7 @@ recover:
 	} while ((bh = bh->b_this_page) != head);
 	SetPageError(page);
 	BUG_ON(PageWriteback(page));
+	mapping_set_error(page->mapping, err);
 	set_page_writeback(page);
 	do {
 		struct buffer_head *next = bh->b_this_page;