From: Eric Sandeen <sandeen@sandeen.net>
To: Martin Steigerwald <Martin@lichtvoll.de>
Cc: xfs@oss.sgi.com
Subject: Re: LWN article: ext4 and data loss
Date: Sat, 14 Mar 2009 15:02:00 -0500 [thread overview]
Message-ID: <49BC0D38.5060106@sandeen.net> (raw)
In-Reply-To: <200903142042.51574.Martin@lichtvoll.de>
Martin Steigerwald wrote:
> Am Donnerstag 12 März 2009 schrieb Eric Sandeen:
...
>> Filesystems can hack around some heuristics to try to make unsafe apps
>> safer, but in the end, it's the app's job to make sure a buffered write
>> hits permanent storage when it matters.
>
> Hmmm, okay. So here is:
>
> http://bugs.kde.org/187172
>
> Feel free to add there. You'd need a bugzilla login tough.
>
> Ciao,
Perhaps you can try this and add info if you like.
There is an environment variable KDE_EXTRA_FSYNC, put in with this
changelog:
Do not paranoidly sync every time, it causes I/O performance problems
for some users. People who still want it for whatever reason like using
XFS can set $KDE_EXTRA_FSYNC to 1."
This is not "extra" - it is necessary if you actually want the data to
be on-disk.
See also: http://lists.kde.org/?l=kde-devel&m=120880682813170&w=2
(note however that xfs is _not_ "zeroing just to be sure...")
http://api.kde.org/4.x-api/kdelibs-apidocs/kde3support/html/k3tempfile_8cpp-source.html
bool
K3TempFile::sync()
int result = 0;
if (mStream)
{
do {
result = fflush(mStream); // We need to flush first otherwise
fsync may not have our data
}
while ((result == -1) && (errno == EINTR));
if (result)
{
kWarning() << "K3TempFile: Error trying to flush " << mTmpName
" << strerror(errno);
mError = errno;
}
}
if (mFd >= 0)
{
if( qgetenv( "KDE_EXTRA_FSYNC" ) == "1" )
{
result = FDATASYNC(mFd);
if (result)
{
kWarning() << "K3TempFile: Error trying to sync " <<
mTmpName << ": " << strerror(errno);
mError = errno;
}
}
}
return (mError == 0);
}
So somebody knew it was the right thing to do, but then turned it off,
probably because of ext3's painful behavior on fsync (see also: firefox
"bug" from a while ago)
what's interesting is that the sync() method isn't automatically called
from the other methods, near as I can tell, so it's up to the api user
to invoke it; and even then it only does fflush() not fsync() by
default, which doesn't actually push things to disk.
I'd suggest turning on this KDE_EXTRA_FSYNC and see how things go from
there on.
Although, the API refs say that this is deprecated in favor of
KTemporaryFile, and I find no reference whatsoever to "sync" of any kind
in ktemporaryfile.cpp.
-Eric
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2009-03-14 20:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-12 11:39 LWN article: ext4 and data loss Michael Monnerie
2009-03-12 13:09 ` Eric Sandeen
2009-03-12 14:14 ` Martin Steigerwald
2009-03-12 15:02 ` Eric Sandeen
2009-03-12 16:33 ` Greg Banks
2009-03-12 16:36 ` Eric Sandeen
2009-03-12 16:45 ` Greg Banks
2009-03-14 19:42 ` Martin Steigerwald
2009-03-14 20:02 ` Eric Sandeen [this message]
2009-03-14 20:08 ` Eric Sandeen
2009-03-14 22:03 ` Martin Steigerwald
2009-03-15 14:26 ` Peter Grandi
2009-03-14 19:43 ` Martin Steigerwald
2009-03-16 16:17 ` Michael Monnerie
2009-03-18 18:52 ` Martin Steigerwald
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=49BC0D38.5060106@sandeen.net \
--to=sandeen@sandeen.net \
--cc=Martin@lichtvoll.de \
--cc=xfs@oss.sgi.com \
/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