[PATCH 3.11 05/70] ext4: note the error in ext4_end_bio()

Luis Henriques luis.henriques at canonical.com
Wed May 7 13:12:08 UTC 2014 -stable review patch.  If anyone has any objections, please let me know.


From: Matthew Wilcox <willy at linux.intel.com>

commit 9503c67c93ed0b95ba62d12d1fd09da6245dbdd6 upstream.

ext4_end_bio() currently throws away the error that it receives.  Chances
are this is part of a spate of errors, one of which will end up getting
the error returned to userspace somehow, but we shouldn't take that risk.
Also print out the errno to aid in debug.

Signed-off-by: Matthew Wilcox <matthew.r.wilcox at intel.com>
Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
Reviewed-by: Jan Kara <jack at suse.cz>
Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
 fs/ext4/page-io.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 6625d21..3ec6f74 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -323,13 +323,14 @@ static void ext4_end_bio(struct bio *bio, int error)
 	if (error) {
 		struct inode *inode = io_end->inode;
-		ext4_warning(inode->i_sb, "I/O error writing to inode %lu "
+		ext4_warning(inode->i_sb, "I/O error %d writing to inode %lu "
 			     "(offset %llu size %ld starting block %llu)",
-			     inode->i_ino,
+			     error, inode->i_ino,
 			     (unsigned long long) io_end->offset,
 			     (long) io_end->size,
 			     (unsigned long long)
 			     bi_sector >> (inode->i_blkbits - 9));
+		mapping_set_error(inode->i_mapping, error);
 	if (io_end->flag & EXT4_IO_END_UNWRITTEN) {

More information about the kernel-team mailing list