From: Dave Chinner <david@fromorbit.com>
To: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [2.6.30 and later] file corruption on ext3 filesystem.
Date: Fri, 8 Jan 2010 23:36:41 +1100 [thread overview]
Message-ID: <20100108123641.GB8654@discord.disaster> (raw)
In-Reply-To: <201001080254.o082sOXB018423@www262.sakura.ne.jp>
On Fri, Jan 08, 2010 at 11:54:24AM +0900, Tetsuo Handa wrote:
> Hello.
>
> I'm experiencing file corruption problem.
> Can somebody reproduce below result?
>
> My environment:
> VMware Workstation 6.5.3 with 2CPUs / 512MB RAM.
> ext3 filesystem ( /dev/sda1 ) mounted on / .
>
> 2.6.33-rc3 ( http://I-love.SAKURA.ne.jp/tmp/config-2.6.33-rc3-ext3 )
> 2.6.32.3 ( http://I-love.SAKURA.ne.jp/tmp/config-2.6.32.3-ext3 )
> 2.6.31.11 ( http://I-love.SAKURA.ne.jp/tmp/config-2.6.31.11-ext3 )
> 2.6.30.10
>
> So far, I haven't succeeded to reproduce this problem for 2.6.29 and earlier.
> Maybe this problem exists in only 2.6.30 and later.
Isn't that when the default mount options changed from data=ordered to
data=writeback?
> Steps to reproduce:
>
> Compile below program using "gcc -Wall -O3 -o a.out".
>
> ----------
> #include <stdio.h>
> #include <string.h>
> #include <unistd.h>
>
> int main(int argc, char *argv[])
> {
> FILE *fp = fopen("/testfile", "a");
> char buffer[4096];
> memset(buffer, argc > 1 ? argv[1][0] : 0x20, sizeof(buffer));
> buffer[sizeof(buffer) - 1] = '\n';
> fwrite(buffer, 1, sizeof(buffer), fp);
> fflush(fp);
> sleep(5);
> fprintf(stderr, "Let power fail after a few seconds.\n");
> while (1) {
> sleep(1);
> fwrite(buffer, 1, sizeof(buffer), fp);
> }
> return 0;
> }
> ----------
>
> Reboot the system by executing /sbin/reboot .
>
> Run ./a.out and let the power fail (i.e. unplug the electric cable
> or do equivalent) after more than 5 seconds (i.e. longer than kjournald's
> commit interval). Probably 2 or 3 seconds after
> "Let power fail after a few seconds.\n" was printed is the best.
>
> Restart the system (and fsck will be executed).
>
> Run "cat /testfile". It should contain only lines of 4095 spaces + '\n'
> (or the byte specified via argv[]). But it contains different data.
You didn't fsync() it, so there is no reason for the kernel
to have ever written it to disk. Therefore the result after powerfail
is completely undefined - you data may be there, it may not...
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2010-01-08 12:36 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-08 2:54 Tetsuo Handa
2010-01-08 4:07 ` Jamie Lokier
2010-01-08 12:36 ` Dave Chinner [this message]
2010-01-08 13:15 ` Tetsuo Handa
2010-01-08 15:19 ` Dave Chinner
2010-01-09 2:53 ` Tetsuo Handa
2010-01-11 20:13 ` Ric Wheeler
2010-01-15 20:01 ` Pavel Machek
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=20100108123641.GB8654@discord.disaster \
--to=david@fromorbit.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=penguin-kernel@I-love.SAKURA.ne.jp \
/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®