[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>