Armadilloフォーラム

CF書込み中の判定手段

kazama140206

2015年6月3日 13時20分

お世話になります。

CFが書込み中か、書込み終了となっているか
を知る方法はあるでしょうか?

装置の電源をOFF等する際 CFが書込み中か
判るようにしてほしいという要望への対応の為です。
装置にArmadilloを実装しています。

CF上のファイルを変更しファイルクローズした後も
デバイスへの実際の書込みは暫く続くという
認識です。
その間、書込み中なのか終了したのか、何か参照して
判断できる情報というのは有るものでしょうか?

Armadillo-9
linux-2.4.31-a9-3
atmark-dist-20061020
の環境の装置になります。
宜しく、お願いします。


コメント

kes-konishi

2015年6月3日 13時58分

KES)小西です。

コマンド、システムコール共に
sync、fsyncを使用してはいかがでしょうか?
参考:
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/sync.2.html
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/fsync.2.html
共にブロッキングI/Fなので、キャッシュ吐き出し完了までブロッキングされるため、
吐き出し中か?の状態は見れません。

「CFカード」とのキーワードで気になったのですが、直接接続の方であっていますか?
USB接続の場合は、CFリーダライタのファーム内でのキャッシュの可能性が残りますので。。。

直接、ファイルキャッシュ吐き出しならpdflushを触るしかなくなりますが、難易度は上がります。
と思ったらLinux-2.4でしたので、kupdateですね。

kazama140206

2015年6月3日 15時26分

KES)小西様

有難う御座います。

sync, fsync 参考に致します。
書込み動作自体はあまり変えずに
状況参照が出来ればと思っています。

>「CFカード」とのキーワードで気になったのですが、直接接続の方であっていますか?
はい、CFはArmadilloのCFスロットに直接接続の形です。

kupdateを知らなかったのですが
これが定期的にキャッシュがあるか見て
デバイスに書込む条件が発生したら
書込むという事をしてるもののようですね。

kupdateは書込み中のキャッシュデータが
あるか知っているという事になりますよね
kupdateをもうちょっと調べてみたいと思います。

有難うございました。

kes-konishi

2015年6月3日 15時46分

KES)小西です。

余計なおせっかいかもしれませんが
> CF上のファイルを変更しファイルクローズした後も
> デバイスへの実際の書込みは暫く続くという
> 認識です。
の対策でファイルをブロッキングIOでオープンしているのであれば
以下の対策も有効かと思います。
ファイルオープン時にO_SYNCを指定すれば、ライトスルー同等(fsyncを毎回実施)
の書き込みで各システムコール(read、write、close)が動作すると思います。
また、書き込み完了までブロッキングされます。

ちなみにカーネル2.4なので、O_DSYNCは実装されていないと思われますので
ご注意を。。。

kazama140206

2015年6月3日 16時52分

KES)小西 様

O_SYNCの件、参考に致します。

未だ、実際に対策するか判りませんが、
装置には CFのアンマウントの機能があるので
OFFの前にそれをやって貰えば
何でも無い事だとは思っているのですが。。。

ありがとうございます。