From: Andrew Morton <akpm@zip.com.au>
To: Dave Hansen <haveblue@us.ibm.com>
Cc: Alexander Viro <viro@math.psu.edu>, linux-kernel@vger.kernel.org
Subject: Re: OOPS caused by ext2 changes
Date: Mon, 15 Apr 2002 20:27:17 -0700 [thread overview]
Message-ID: <3CBB9A15.E04FDA10@zip.com.au> (raw)
In-Reply-To: <3CBB7B73.8090104@us.ibm.com>
Dave Hansen wrote:
>
> Andrew Morton and I discused this earlier. I have some more information
> now. The problem: "dbench 64" run on a small (~120meg) partition with
> 1k block sizes produces Oopses.
>
> This changeset:
> http://linus.bkbits.net:8080/linux-2.5/patch@1.248.2.6?nav=index.html|ChangeSet|cset@1.248.2.6
> is the culprit. Without it applied, none of this happens.
>
It's vaguely surprising that that chunk is associated with the
problem.
However it seems that there's potential for a buffer reference
leak in ext2_get_branch:
while (--depth) {
bh = sb_bread(sb, le32_to_cpu(p->key));
if (!bh)
goto failure;
/* Reader: pointers */
if (!verify_chain(chain, p))
goto changed;
add_chain(++p, bh, (u32*)bh->b_data + *++offsets);
/* Reader: end */
if (!p->key)
goto no_block;
}
return NULL;
changed:
*err = -EAGAIN;
goto no_block;
failure:
*err = -EIO;
no_block:
return p;
}
See, sb_bread() bumps b_count, but on the `goto changed;'
branch we lose track of that buffer.
b_count is only 16 bits, so it's conceivable that the
count wraps to zero, and that is fatal.
It would be interesting to replace that `goto changed;'
with { __brelse(bh); goto changed; }. Plus maybe a
debug printk to see if we are indeed hitting that path.
I don't think this is the bug actually - if we were
leaking bh refs that easily we'd get `busy buffer'
whines at unmount. But it merits investigation.
-
next prev parent reply other threads:[~2002-04-16 3:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-04-16 1:16 OOPS caused by ext2 changes Dave Hansen
2002-04-16 3:27 ` Andrew Morton [this message]
2002-04-16 5:31 ` David C. Hansen
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=3CBB9A15.E04FDA10@zip.com.au \
--to=akpm@zip.com.au \
--cc=haveblue@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@math.psu.edu \
/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