[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mhc:02144] Re: palm2mhc should fsync before clear dirty flag.
Message-Id: <20050705112626E.nom@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 05 Jul 2005 11:26:26 +0900
From: Yoshinari Nomura <nom@xxxxxxxxxxxxx>
Subject: [mhc:02142] Re: palm2mhc should fsync before clear dirty..
| いつもお世話になってます.乃村です.
中途半端なパッチでいつも迷惑をおかけしております
| この変更ですが,system 使うのもナンなので,
| Ruby18 以降なら fsync するというコードに
| していただけると嬉しいです.
こんな感じでしょうか:
f .fsync if RUBY_VERSION >= '1.8'
こんなのでもいいかなとおもいました:
f .fsync if f .respond_to?("fsync")
Message-Id: <w0gll4mdjd1.wl%os@xxxxxxxxx>
Date: Tue, 05 Jul 2005 12:25:46 +0900
From: OHARA Shigeki <os@xxxxxxxxx>
Subject: [mhc:02143] Re: palm2mhc should fsync before clear dirty..
| # commit
| system("sync")
| system("sync")
| # done.
|
| 2回目の sync が返ってきた時点で書き込み成功と思って良さそうです。
|
| http://home.jp.FreeBSD.org/cgi-bin/showmail/FreeBSD-users-jp/5924
ファイルシステムの実装に依存する話なので
個人的にはsyncを何回たたこうが保証はできないと思っています。
#unmountかreadonlyでremountするのが確実かと。
実はfsyncでも親ディレクトリまでは書き込み保証されないので
mkdir /tmp/dir
open /tmp/dir/file
write
fsync
close
panic
となったとき
fsyncはfileのinodeとdataは書き込みを保証しますが
ディレクトリの書き出しは保証してくれないので
リブートすると親となるディレクトリが失われたために
inodeとdataが孤児になってしまうという状況がありえます。
FreeBSD 6 CURRENTのufs+softupdateで試したらそうなりました。
FedoraCore2のext3ではfsyncするとディレクトリも作成されてました。
--
KOIE Hidetaka <hide@xxxxxxxx>