While the design of ext3 in the regard to this bug might be considered
accidental, it would be wise to attempt to carry it over to ext4 in
order to go 'above and beyond' POSIX in compatibility with previous
behaviour. Specifically, truncation of a file needs to be made a regular
write operation so that it would be cached with other write operations
and flushed to disk in a regular batch.

Given the following code:

1.a) open and read file ~/.kde/foo/bar/baz
1.b) fd = open("~/.kde/foo/bar/baz", O_WRONLY|O_TRUNC|O_CREAT) --- this 
truncates the file
1.c) write(fd, buf-of-new-contents-of-file, size-of-new-contents-of-file)
1.d) close(fd)

Assuming that less than 30 seconds pass between 1.b and 1.c, these two
operations must be executed at the same write cycle without allowing a
significant window of opportunity for major data loss.

2.a) open and read file ~/.kde/foo/bar/baz
2.b) fd = open("~/.kde/foo/bar/baz.new", O_WRONLY|O_TRUNC|O_CREAT)
2.c) write(fd, buf-of-new-contents-of-file, size-of-new-contents-of-file)
2.d) close(fd)
2.e) rename("~/.kde/foo/bar/baz.new", "~/.kde/foo/bar/baz")

It is even clearer here - why would the rename operation change the
destination file before the previous operations are completed? It should
not - the rename must be an atomic operation, even if POSIX does not
demand it. This is an expected behaviour for extN filesystem and ext4
needs to document and honor that.

I understand that a program can not be certain that data will reach the
disk unless some sort of fsync() is called. But destroying old data and
then delaying writing the new version _is_ an ext4 bug, regardless of
what POSIX says.

And as a sidenote - maybe programmers feel differently, but system
administrators much prefer to have a bunch of small text files that we
can edit with text editors and all kinds of scripts instead of SQL
database stores for application configuration. Configuration registry is
a cool principle, but a horrible practice even in bast implementations.

-- 
Ext4 data loss
https://bugs.launchpad.net/bugs/317781
You received this bug notification because you are a member of eCryptfs,
which is subscribed to ecryptfs-utils in ubuntu.

Status in “ecryptfs-utils” source package in Ubuntu: Invalid
Status in “linux” source package in Ubuntu: Confirmed
Status in ecryptfs-utils in Ubuntu Jaunty: Invalid
Status in linux in Ubuntu Jaunty: Confirmed

Bug description:
I recently installed Kubuntu Jaunty on a new drive, using Ext4 for all my data.

The first time i had this problem was a few days ago when after a power loss 
ktimetracker's config file was replaced by a 0 byte version . No idea if 
anything else was affected.. I just noticed ktimetracker right away.

Today, I was experimenting with some BIOS settings that made the system crash 
right after loading the desktop. After a clean reboot pretty much any file 
written to by any application (during the previous boot) was 0 bytes.
For example Plasma and some of the KDE core config files were reset. Also some 
of my MySQL databases were killed...

My EXT4 partitions all use the default settings with no performance tweaks. 
Barriers on, extents on, ordered data mode..

I used Ext3 for 2 years and I never had any problems after power losses or 
system crashes.

Jaunty has all the recent updates except for the kernel that i don't upgrade 
because of bug #315006

ProblemType: Bug
Architecture: amd64
DistroRelease: Ubuntu 9.04
NonfreeKernelModules: nvidia
Package: linux-image-2.6.28-4-generic 2.6.28-4.6
ProcCmdLine: root=UUID=81942248-db70-46ef-97df-836006aad399 ro rootfstype=ext4 
vga=791 all_generic_ide elevator=anticipatory
ProcEnviron:
 LANGUAGE=
 LANG=en_US.UTF-8
 SHELL=/bin/bash
ProcVersionSignature: Ubuntu 2.6.28-4.6-generic
SourcePackage: linux

_______________________________________________
Mailing list: https://launchpad.net/~ecryptfs
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~ecryptfs
More help   : https://help.launchpad.net/ListHelp

Reply via email to