From: Theodore Tso <tytso@mit.edu>
To: Andres Freund <andres@anarazel.de>,
Alex Buell <alex.buell@munted.org.uk>
Cc: adilger@sun.com, LKML <linux-kernel@vger.kernel.org>,
linux-ext4@vger.kernel.org,
Jonathan Bastien-Filiatrault <joe@x2a.org>,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Subject: Re: EXT4 ENOSPC Bug
Date: Mon, 16 Feb 2009 14:00:01 -0500 [thread overview]
Message-ID: <20090216190001.GB11788@mini-me.lan> (raw)
In-Reply-To: <20090216162028.3032666a@lithium.local.net> <499985C7.8010302@anarazel.de>
On Mon, Feb 16, 2009 at 04:27:03PM +0100, Andres Freund wrote:
>
> So, yes, seems to be an inode allocation problem.
>
Andres, Alex, others,
I'm pretty sure the ENOSPC problem which you both found is an inode
allocation problem. Some of you seem to have an easier time
reproducing it than others; could you try this patch, and periodically
scan your system logs for the message "ext4: find_group_flex failed,
fallback succeeded"? If the problem goes away for you, and you find
the occasional aforemention message in your system log, that will
confirm what I suspect, which is the bug is in fs/ext4/inode.c's
find_group_flex() function. (If I'm wrong, the fallback code will
activate only when the filesystem is genuinely out of inodes, which
should be very rare.)
More comments are in the patch header. My current long-term plan for
dealing with this is to enhance find_group_orlov() to and
find_group_other() to understand about flex_bg's.
- Ted
commit 1012e25b371b203164e4766a98f1e696df68b56d
Author: Theodore Ts'o <tytso@mit.edu>
Date: Mon Feb 16 13:51:16 2009 -0500
ext4: Add fallback for find_group_flex
This is a workaround for find_group_flex() which badly needs to be
replaced. One of its problems (besides ignoring the Orlov algorithm)
is that it is a bit hyperactive about returning failure under
suspicious circumstances. This can lead to spurious ENOSPC failures.
Work around this for now by retrying the search using
find_group_other() if find_group_flex() returns -1. If
find_group_other() succeeds when find_group_flex(), log a warning
message. I can't quite find the motivation to spend effort working on
fixing find_group_flex() given that I want to replace it all anyway
(and in fact work on the replacement code is underway), so we may
leave the workaround for as long as find_group_flex() stays in the
kernel...
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index a200059..21080ab 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -715,6 +715,13 @@ struct inode *ext4_new_inode(handle_t *handle, struct inode *dir, int mode)
if (sbi->s_log_groups_per_flex) {
ret2 = find_group_flex(sb, dir, &group);
+ if (ret2 == -1) {
+ ret2 = find_group_other(sb, dir, &group);
+ if (ret2 == 0)
+ printk(KERN_NOTICE "ext4: find_group_flex "
+ "failed, fallback succeeded dir %lu\n",
+ dir->i_ino);
+ }
goto got_group;
}
next prev parent reply other threads:[~2009-02-16 19:00 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-29 13:18 EXT4 ENOSPC Bug Andres Freund
2008-11-29 20:32 ` Jonathan Bastien-Filiatrault
2008-11-29 21:15 ` Theodore Tso
2008-11-29 21:31 ` Andres Freund
2008-12-01 12:34 ` Andres Freund
2008-12-01 19:42 ` Andreas Dilger
2008-12-01 20:16 ` Andres Freund
2008-12-02 7:57 ` Theodore Tso
2008-12-02 14:58 ` Andres Freund
2008-12-02 16:47 ` Theodore Tso
2008-12-02 17:47 ` Andres Freund
2008-12-02 20:33 ` Theodore Tso
2008-12-03 0:37 ` Jonathan Bastien-Filiatrault
2008-12-03 0:40 ` Jonathan Bastien-Filiatrault
2008-12-03 4:37 ` Theodore Tso
2008-12-03 15:34 ` Aneesh Kumar K.V
2008-12-03 17:23 ` Theodore Tso
2008-12-03 18:18 ` Andres Freund
2008-12-02 15:26 ` Henrique de Moraes Holschuh
2008-12-10 0:07 ` Andres Freund
2009-02-16 11:37 ` Andres Freund
2009-02-16 15:01 ` Theodore Tso
2009-02-16 15:27 ` Andres Freund
2009-02-16 19:00 ` Theodore Tso [this message]
2009-02-17 17:21 ` Alex Buell
2009-02-17 17:36 ` Andres Freund
2009-02-18 21:18 ` Andres Freund
2009-02-18 21:29 ` Theodore Tso
2009-02-19 2:18 ` Andres Freund
2009-02-19 3:22 ` Theodore Tso
2009-02-19 15:46 ` Eric Sandeen
2009-02-23 2:02 ` Theodore Tso
2009-02-27 3:57 ` Andres Freund
2009-02-17 18:13 ` Eric Sandeen
2009-02-17 20:08 ` Eric Sandeen
[not found] ` <499B1935.10906@redhat.com>
2009-02-17 22:00 ` Theodore Tso
2009-02-17 22:30 ` Alex Buell
2009-02-17 22:56 ` Eric Sandeen
2009-02-17 22:59 ` Alex Buell
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=20090216190001.GB11788@mini-me.lan \
--to=tytso@mit.edu \
--cc=adilger@sun.com \
--cc=alex.buell@munted.org.uk \
--cc=andres@anarazel.de \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=joe@x2a.org \
--cc=linux-ext4@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).