Cente FileSystem

メディア挿抜時、書き込み処理を実行するとディスクフルエラーが発生する不具合について


発行番号: Cente101-0113
Rev: 第1版
発行日: 2021/05/28

【題名】
メディア挿抜後の書き込み処理でディスクフルエラーが発生する不具合について

【適用製品】
Cente FileSystem Ver6.20 ~ Ver6.41

【影響API】
fopen, fopen_uni, remove, remove_uni, rmdir, rmdir_uni, chg_filelen, chk_dsk, chk_dsk_uni

【現象】
メディアを抜去し、以下の何れかのパターンを実行した後に再挿入すると、書き込みAPIでディスクフルエラーが発生する可能性があります。

<パターン1>
別の環境にてメディアを書き換えて戻した場合。

<パターン2>
別のメディアを挿入した場合。

【原因】
Ver6.20リリース時に空きFAT検索開始位置の仕様改善を行いましたが、その際に追加した内部変数 nullfat2 情報をマウント処理時にクリアする処理が抜けておりました。誤った古い情報にアクセスしてしまうことで不具合が発生します。

具体的な発生のメカニズムについてですが、nullfat2 にはFAT領域の空き位置情報(クラスタ番号)が格納されます。
nullfat2 に格納されているクラスタ番号は必ず空いている必要がありますが、クリア処理が抜けていたことで、抜去後に別の環境でメディアの書き換えを行って戻した場合や、別のメディアを挿入した場合(nullfat2のクラスタ位置が
既に使用されている状態)にて発生する可能性があります。
また空き位置情報としては nullfat と nullfat2 の2つの情報がありますが、nullfatの情報で検索した後、空きが無かった場合に nullfat2 の情報を参照するようになっております。
このため nullfat 情報にて空き検索に成功した場合にはエラーは発生いたしません。

空き領域が少ない環境で発生する確率が高くなります。
本不具合はFAT種には依存せず、FAT12/16/32の環境で発生いたします。

【回避方法】
メディア抜去後、再挿入をする場合は一旦組込み機器を再起動してください。

■プログラムによる回避方法
修正ソースにつきましては、弊社サポートまでお問い合わせ下さい。