From: Johann Lombardi <johann@clusterfs.com>
To: linux-kernel@vger.kernel.org
Subject: Clear PG_error before reading a page
Date: Tue, 15 May 2007 16:37:26 +0200 [thread overview]
Message-ID: <20070515143726.GC2160@chiva> (raw)
We've observed that transient disk errors can result in persistent I/O issues
at the filesystem level. I can at least put forward the problem with ext2/ext3
and scsci_debug.
Here are the steps to reproduce:
* format an ext3 fs on a SCSI disk simulated by scsci_debug
* mount the fs and create a 10MB file
* unmount/remount the fs
* enable the medium error flag in scsi_debug (please note that I've slightly
modified scsi_debug to return a medium error indication when any sector >=
0x1234 is read)
* try to read the file (as expected, got -EIO)
* disable medium error injection in scsi_debug
* try to read the file (keep getting -EIO)
In fact, when the underlying device experiences errors, block_read_full_page()
calls ext3_get_block() which correctly returns an I/O error.
Consequently, block_read_full_page() set the PG_error flag.
However, the problem is that afterwards, when the device no longer returns
any errors, PG_error is never cleared and, as a consequence, we are still
getting -EIO at the filesystem level.
Granted that block_read_full_page() always tries to fill a full page,
I think it should first clear the PG_error flag and set it back if a call
to get_block() fails. Besides, we should handle this in block_read_full_page
but also in other places that do full page reads. Any comments?
I am not able to reproduce the problem with the patch below.
Johann
Signed-off-by: Johann Lombardi <johann@clusterfs.com>
--
--- linux-2.6.12.6.orig/fs/buffer.c 2005-08-29 18:55:27.000000000 +0200
+++ linux-2.6.12.6/fs/buffer.c 2007-05-11 15:51:03.000000000 +0200
@@ -2078,6 +2078,7 @@ int block_read_full_page(struct page *pa
int fully_mapped = 1;
BUG_ON(!PageLocked(page));
+ ClearPageError(page);
blocksize = 1 << inode->i_blkbits;
if (!page_has_buffers(page))
create_empty_buffers(page, blocksize, 0);
next reply other threads:[~2007-05-15 14:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-15 14:37 Johann Lombardi [this message]
2007-05-15 17:11 ` Clear PG_error before reading a page Andrew Morton
2007-05-15 21:01 ` Johann Lombardi
2007-05-15 21:23 ` Andrew Morton
2007-05-16 15:39 ` Johann Lombardi
2007-05-16 15:49 ` Nick Piggin
2007-05-16 16:12 ` Andrew Morton
2007-05-17 11:42 ` Johann Lombardi
2007-05-17 16:47 ` Andrew Morton
2007-05-29 17:06 ` Johann Lombardi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070515143726.GC2160@chiva \
--to=johann@clusterfs.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.