From: Josef Bacik <jbacik@redhat.com>
To: Andreas Dilger <adilger@sun.com>
Cc: Josef Bacik <jbacik@redhat.com>,
Vegard Nossum <vegard.nossum@gmail.com>,
Josef Bacik <josef@toxicpanda.com>,
linux-ext4@vger.kernel.org, sct@redhat.com,
akpm@linux-foundation.org, Johannes Weiner <hannes@saeurebad.de>,
linux-kernel@vger.kernel.org
Subject: Re: ext3 on latest -git: BUG: unable to handle kernel NULL pointer dereference at 0000000c
Date: Fri, 18 Jul 2008 06:51:52 -0400 [thread overview]
Message-ID: <20080718105152.GB15844@unused.rdu.redhat.com> (raw)
In-Reply-To: <20080717230905.GI6239@webber.adilger.int>
On Thu, Jul 17, 2008 at 05:09:05PM -0600, Andreas Dilger wrote:
> On Jul 17, 2008 10:43 -0400, Josef Bacik wrote:
> > Yeah thats a hard to answer question, one that I will leave up to others
> > who have been doing this much longer than I. My thought is remount-ro
> > is there to keep you from crashing, so if you have errors=continue then
> > you expect to live with the consequences. Course if that bit gets flipped
> > via corruption thats not good either.
>
> It shouldn't cause the kernel to crash, but it should definitely return
> an error to the application. This is probably one of the code paths
> that the Coverity folks were reporting on in FAST this year where on-disk
> errors are not propagated to the application.
Ok, please revert the previous patch and apply this one. On errors=continue we
will just abort the handle which should keep the NULL pointer dereference from
happening and return an error back to the application. Please let me know how
this works Vegard, and thanks alot for testing all this.
Signed-off-by: Josef Bacik <jbacik@redhat.com>
Index: linux-2.6/fs/ext3/inode.c
===================================================================
--- linux-2.6.orig/fs/ext3/inode.c
+++ linux-2.6/fs/ext3/inode.c
@@ -2023,13 +2023,27 @@ static void ext3_clear_blocks(handle_t *
unsigned long count, __le32 *first, __le32 *last)
{
__le32 *p;
+ int ret;
+
if (try_to_extend_transaction(handle, inode)) {
if (bh) {
BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
- ext3_journal_dirty_metadata(handle, bh);
+ ret = ext3_journal_dirty_metadata(handle, bh);
+ if (ret) {
+ ext3_std_error(inode->i_sb, ret);
+ return;
+ }
}
- ext3_mark_inode_dirty(handle, inode);
- ext3_journal_test_restart(handle, inode);
+ ret = ext3_mark_inode_dirty(handle, inode);
+ if (ret)
+ return;
+
+ ret = ext3_journal_test_restart(handle, inode);
+ if (ret) {
+ ext3_std_error(inode->i_sb, ret);
+ return;
+ }
+
if (bh) {
BUFFER_TRACE(bh, "retaking write access");
ext3_journal_get_write_access(handle, bh);
Index: linux-2.6/fs/ext3/balloc.c
===================================================================
--- linux-2.6.orig/fs/ext3/balloc.c
+++ linux-2.6/fs/ext3/balloc.c
@@ -498,6 +498,7 @@ void ext3_free_blocks_sb(handle_t *handl
ext3_error (sb, "ext3_free_blocks",
"Freeing blocks not in datazone - "
"block = "E3FSBLK", count = %lu", block, count);
+ err = -EIO;
goto error_return;
}
@@ -535,6 +536,7 @@ do_more:
"Freeing blocks in system zones - "
"Block = "E3FSBLK", count = %lu",
block, count);
+ err = -EIO;
goto error_return;
}
Index: linux-2.6/fs/ext3/super.c
===================================================================
--- linux-2.6.orig/fs/ext3/super.c
+++ linux-2.6/fs/ext3/super.c
@@ -167,7 +167,15 @@ static void ext3_handle_error(struct sup
EXT3_SB(sb)->s_mount_opt |= EXT3_MOUNT_ABORT;
if (journal)
journal_abort(journal, -EIO);
+ } else {
+ handle_t *handle = current->journal_info;
+ if (handle && !is_handle_aborted(handle)) {
+ if (!handle->h_err)
+ handle->h_err = -EIO;
+ journal_abort_handle(handle);
+ }
}
+
if (test_opt (sb, ERRORS_RO)) {
printk (KERN_CRIT "Remounting filesystem read-only\n");
sb->s_flags |= MS_RDONLY;
next prev parent reply other threads:[~2008-07-18 11:12 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-17 12:51 Vegard Nossum
2008-07-17 13:13 ` Josef Bacik
2008-07-17 13:20 ` Vegard Nossum
2008-07-17 13:34 ` Josef Bacik
2008-07-17 13:39 ` Vegard Nossum
2008-07-17 13:40 ` Josef Bacik
2008-07-17 13:57 ` Josef Bacik
2008-07-17 14:25 ` Vegard Nossum
2008-07-17 14:13 ` Josef Bacik
2008-07-17 14:35 ` Vegard Nossum
2008-07-17 14:16 ` Josef Bacik
2008-07-17 14:44 ` Vegard Nossum
2008-07-17 14:33 ` Josef Bacik
2008-07-17 15:00 ` Vegard Nossum
2008-07-17 14:43 ` Josef Bacik
2008-07-17 23:09 ` Andreas Dilger
2008-07-18 10:51 ` Josef Bacik [this message]
2008-07-18 11:32 ` Vegard Nossum
2008-07-18 11:20 ` Josef Bacik
2008-07-18 11:58 ` Vegard Nossum
2008-07-18 20:28 ` Vegard Nossum
2008-07-17 15:08 ` Theodore Tso
2008-07-17 15:16 ` Vegard Nossum
2008-07-17 15:40 ` Theodore Tso
2008-07-17 23:06 ` Andreas Dilger
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=20080718105152.GB15844@unused.rdu.redhat.com \
--to=jbacik@redhat.com \
--cc=adilger@sun.com \
--cc=akpm@linux-foundation.org \
--cc=hannes@saeurebad.de \
--cc=josef@toxicpanda.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sct@redhat.com \
--cc=vegard.nossum@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®