Re: [2.6.30 and later] file corruption on ext3 filesystem.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux