Cente FileSystem

Cente FileSystem

・エラーコードが正しく更新されない問題について(Cente障害情報:101-0122)
FileSystemエラーコードを更新しない不具合を修正しました。

・メタデータ保護機能の管理用バッファがオーバーフローしてしまう問題について(Cente障害情報:101-0123)
複数のFATセクタにクラスタチェーンが跨がるようなファイル/ディレクトリにアクセスした場合にバッファのオーバーフローが発生してしまう不具合を修正しました。

・アンマウント中にfclose()を実行するとファイルクローズができなくなる問題について(Cente障害情報:101-0124)
アンマウント中にfclose()を実行してもファイルクローズができない不具合を修正しました。

・社名変更
社名をNXTech株式会社に統一しました。

アンマウント中にfclose()を実行するとファイルクローズができなくなる問題について

発行番号: Cente101-0124
Rev: 第1版
発行日: 2024/9/2

【題名】
アンマウント中にfclose()を実行するとファイルクローズができなくなる問題について

【適用製品】
Cente FileSystem Ver6.11 ~ Ver6.50

【影響API】
fclose

【現象】
ファイルオープン中にメディアをアンマウントしfclose()を実行すると、エラーになり
ファイルをクローズすることができません。
その後、再マウントしても、対象のファイルを削除しようとするとCT_OPENDエラーが発生し、
またfclose()を繰り返し実行してもファイルをクローズすることが出来ない状態になります。

《発生条件について》
以下の順番で処理を実行した場合に発生します
①ファイルをオープン(モードは問いません)
②ファイルクローズせずにアンマウントを実行
③fclose()を実行

【原因】
fclose()ではエラーが起きた場合、ファイル構造体のメンバ”stat”と”name”をクリアします。
“stat”はファイルオープン状態のステータス(主にファイルポインタを引数として渡す関数で使用します)
“name”はファイル名(主にファイルポインタを引数として渡さない関数で使用します)
抜去中にfclose()を実行した場合、本来ファイル構造体のメンバの”stat”と”name”をクリアする必要がありますが、
抜去中は”stat”のみクリアを行っておりました。
それにより、”name”を確認するremove()やmove()を実行するとCT_OPENDエラーが
発生し、”stat”を確認するfclose()を実行した場合、CT_NOT_OPENエラーが発生します。

【回避方法】
reset_fsys()の実行後、FileSystemの初期化シーケンスを実行することにより解消されます。

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

メタデータ保護機能の管理用バッファがオーバフローしてしまう問題について

発行番号: Cente101-0123
Rev: 第1版
発行日: 2024/06/03

【題名】
メタデータ保護機能の管理用バッファがオーバフローしてしまう問題について

【適用製品】
Cente FileSystem Ver6.10 ~ Ver6.50

【影響API】
chg_filelen, rmdir, fopen, remove, rmdir_all, fwrite, rmdir_uni, fopen_uni
※ fopen(), fopen_uni()は”w”モード且つ既存ファイルを指定した場合に問題が生じます。

【現象】
FS_FAT_BLK_NUMを4で割り切れない値を設定した場合で且つ、複数のFATセクタにクラスタチェーンが跨がるようなファイル/ディレクトリにアクセスした場合にバッファのオーバーフローが発生する可能性があります。(CT_DISK_FULLエラーが発生する可能性があります)。

《発生条件について》
以下の条件を満たした場合に発生します。
①FS_FAT_BLK_NUMを4で割り切れない値を設定した場合。
②jfsectnoで確保している要素以上にFATチェーンの作成/消去を行った場合。
  ※ フラグメンテーションが発生して複数のFATセクタにクラスタチェーンが跨ると、要素以上になる可能性があります。
③影響APIを実行した場合。

【原因】
メタデータ保護機能のバックアップを行う際、FAT1の情報をFAT2にコピーをします。
コピーを行う際、以下の情報を使用します。
・J_FSECT_SZ バックアップ対象のセクタの最大数を管理
・jfsectno バックアップ対象のセクタを記憶する配列テーブル
コピーを行う際、バックアップの範囲は最大J_FSECT_SZのセクタ数までバックアップを行いますが、
設定値によってjfsectnoの要素数がJ_FSECT_SZよりも小さくなる場合がありました。
その結果、バッファのオーバーフローが発生してしまう可能性があります。

以下、J_FSECT_SZ及びjfsectnoの計算式になります。
■fs_journal.c
static ct_uint32_t jfsectno[FS_JNL_DV_MAX][SECT_SZ / sizeof(ct_uint32_t) * J_FSECT_SCT];

■fs_journal.h
#define J_FSECT_SZ    (FS_DATA_SZ / FS_AUS_SZ * FS_FAT_BLK_NUM)
#define J_FSECT_SCT   (J_FSECT_SZ * 4 / SECT_SZ)

■fs_cfg.h
#define FS_DATA_SZ 131072
#define FS_AUS_SZ 4096
#define FS_FAT_BLK_NUM 5
#define FS_DIR_BLK_NUM 8
#define SECT_SZ 512

異常 正常
J_FSECT_SZのサイズ 160 160 → OK
J_FSECT_SCTのサイズ 1 2 → NG
jfsectnoの要素数 128 256

本来、jfsectnoはJ_FSECT_SZよりも大きい配列の要素を確保する必要がありますが、
J_FSECT_SCTのサイズが小数点を考慮できておりませんでした。
その結果、jfsectnoよりもJ_FSECT_SZが大きくなってしまい、現象の発生条件を満たすことによりオーバーフローしてしまう場合がありました。

【回避方法】
ありません。

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

エラーコードが正しく更新されない問題について

発行番号: Cente101-0122
Rev: 第1版
発行日: 2024/03/21

【題名】
エラーコードが正しく更新されない問題について

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

【影響API】
fopen, fopen_uni, rename, rename_uni, move, move_uni, mkdir, mkdir_uni, ct_vdivide, ct_vdivide_uni

【現象】
FileSystemエラーコードにエラーコード(0未満)が格納されている状態で、
影響APIを実行すると、エラーコードを更新せずそのまま返却してしまう可能性があります。

《発生条件について》
以下の全ての条件を満たした場合に発生します。
①「2.影響API」を実行した時に、その直前で他のAPIで異常のエラーコードが戻されていた場合
②「2.影響API」を実行した時に、対象ファイルの情報がディレクトリエントリ領域に新規で書き込まれる場合
③「2.影響API」を実行した時に、対象のディレクトリエントリ領域が複数のクラスタ領域に跨る場合
“(FAT12/16の場合はサブディレクトリ領域のみ、FAT32の場合はルート/サブの両方)”

[例] ①remove()を実行し、存在しないファイルを指定する。
CT_NO_FILE(-3)。
②fopen()をアペンドモードで実行し、存在しないファイルを指定する。
アペンドモードの為、ファイルを作成しようとするが、
①のエラーコードを更新せずそのまま返却してしまい、ファイルの作成が行われない。

【原因】
Cente FileSystemに実装されている関数について、エラーコード返却処理は以下の2パターンがあります。

①returnでエラーコードを上位の関数に戻す。
 [例] return CT_DISK_FULL,

②FSYSER変数にセットし、上位の関数はその変数からエラーコードをゲットする。
 [例] セット: fs_er(CT_DISK_FULL, NULL) ※fs_erp 関数を使用する場合もあります。
   ゲット: er = ct_get_api_fsyser()

ct_get_api_fsyser()を使用する場合は、事前にFSYSER変数にセットする処理が呼ばれている必要がありますが、
ディレクトリエントリにアクセスする関数において、セットする処理を通らずゲットが実行される場合がありました。その結果、以前FSYSERにセットされているエラーコードを上位の関数に戻してしまいます。

【回避方法】
ありません。

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

FAT領域が1面の場合にフォーマットを行うと、キャッシュ領域を初期化できない不具合について

発行番号: Cente101-0121
Rev: 第1版
発行日: 2023/03/31

【題名】
FAT領域が1面の場合にフォーマットを行うと、キャッシュ領域を初期化できない不具合について

【適用製品】
Cente FileSystem Ver4.02 ~ Ver6.42

【影響API】
q_format, q_format_uni

【現象】
FAT領域が1面で、キャッシュ機能を有効にした状態で、
フォーマットを行うと、キャッシュ領域の初期化が出来ず、
古い情報を読み出してしまいます。(FAT領域、ディレクトリエントリ領域)

※FAT領域が2面以上ある場合は該当しません。

【原因】
クイックフォーマットでは、FAT領域、ディレクトリエントリ領域、キャッシュ領域の初期化を行います。
本来ならFAT領域の面数に関わらず、キャッシュ領域を初期化するのが正しいですが、
FAT領域が2面以上の場合に、キャッシュ領域を初期化する形になっておりました。
FAT領域の面数に関わらず、キャッシュ領域を初期化するように修正いたしました。

※FAT領域は通常2面でフォーマットされるため、キャッシュ領域の初期化は行われます。

【回避方法】
ありません。

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

メタデータ保護機能使用時 ディスクフル直前の書き込みでの無限ループが発生する不具合について

発行番号: Cente101-0120
Rev: 第1版
発行日: 2023/03/31

【題名】
メタデータ保護機能使用時 ディスクフル直前の書き込みでの無限ループが発生する不具合について

【適用製品】
Cente FileSystem Ver6.42

【影響API】
fwrite, chg_filelen

【現象】
FAT32かつメタデータ保護機能有効時、
空き容量が160KByteの時に256KByteまとめてfwriteすると、fwriteから返って来なくなる。

【原因】
メタデータ保護機能有効時のFATチェーン更新処理は、FAT領域書き込み前に以下の処理を実行します。
①FAT「全領域」から空きクラスタ位置を検索
②空きクラスタ番号を取得
③保護管理テーブルをチェックし、以前登録済みのクラスタか確認
→ 以前登録済みの場合は、再度①の空きクラスタ検索を実施(※処理を繰り返す)
→ 登録済みで無い場合は、テーブルにクラスタ番号をセット

上記の処理では実際にFAT領域の書き込み処理までは実施しないため、
以下2つの条件を満たした場合に同じ位置のクラスタを繰り返し検索してしまい、
CT_DISK_FULL(-11)を戻さずに無限ループの状態になってしまいます。
・空きクラスタがある状態から書き込みを実施
・空きクラスタ以上のクラスタを書き込み

【回避方法】
1クラスタずつ書込みをおこなう。

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

メタデータ保護機能使用時 残容量が必要以上に消費されてしまう不具合について

発行番号: Cente101-0119
Rev: 第1版
発行日: 2023/03/31

【題名】
メタデータ保護機能使用時 残容量が必要以上に消費されてしまう不具合について

【適用製品】
Cente FileSystem Ver6.10 ~ Ver6.42

【影響API】
fopen_uni, fputc, fputs, fwrite, rename_uni, move_uni, chg_filelen, mkdir_uni

【現象】
FAT32かつメタデータ保護機能が有効なメディアに対して、
2クラスタ分以上の長さのファイルを書き込むとファイルシステムの空き容量が化ける。
get_dev_free_uni()が返す残容量が renew_fsinfo_uni() の前後で変化する。

【原因】
FAT32の場合は、FAT領域を消費した場合にFSINFO領域内の「free cluster count」情報を更新しますが、
実際の消費より余計にカウンタ値を更新していました。

【回避方法】
FAT32またはメタデータ保護機能を使用しない

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

複数ドライブに対しメタデータ保護機能を有効にするとメモリ破壊が起きる不具合について

発行番号: Cente101-0118
Rev: 第1版
発行日: 2023/03/31

【題名】
複数ドライブに対しメタデータ保護機能を有効にするとメモリ破壊が起きる不具合について

【適用製品】
Cente FileSystem Ver6.00 ~ Ver6.42

【影響API】
ini_journal, ini_journal_uni

【現象】
メタデータ保護機能を複数ドライブで有効にした状態で、
書込みAPIを実行するとメモリ破壊が起きます。

【原因】
メタデータ保護用の管理領域はドライブ毎に確保する必要があります。
本来であれば、ini_journal() の第一引数に指定するdrv_name(ドライブ名)
をもとに領域を確保するのが正しいですが、第3引数の feram_no の値によって
領域を確保する形になっておりました。
feram_no はVer6.00 以降未対応で 0 を指定する必要があるため、
drv_name ごとに領域を確保するように修正いたしました。

【回避方法】
・複数のドライブでメタデータ保護機能を有効にしない
・複数のドライブを使用する場合、feram_noの値をインクリメントする

Aドライブ feram_no = 0
Bドライブ feram_no = 1

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

独自ディレクトリ操作API実行時、ディレクトリの読出しに失敗する不具合について

発行番号: Cente101-0117
Rev: 第1版
発行日: 2023/03/31

【題名】
独自ディレクトリ操作API実行時、ディレクトリの読出しに失敗する不具合について

【適用製品】
Cente FileSystem Ver6.30 ~ Ver6.42

【影響API】
rmdir_all, rmdir_all_uni, dinfo, dinfo_uni, readdir_wc, readdir_wc_uni

【現象】
他のタスクと処理がぶつかった場合に、
独自ディレクトリ操作APIでディレクトリの読出しに失敗する。

【原因】
ディレクトリの読出し時、セマフォの資源を獲得した後にディレクトリの読出しを行うべきですが、
セマフォの資源を獲得せずディレクトリの読出しを行っていたため、誤動作する可能性があります。

【回避方法】
複数タスクから影響APIを同時に実行しない

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

Cente FileSystem

・独自APIでのディレクトリ検索時、エラーコード「CT_NOT_INI_D」が戻される不具合を修正(Cente障害情報:101-0114)
独自APIでのディレクトリ検索時、ドライブを全て読み出した後に「CT_NOT_INI_D」が戻される不具合を修正しました。

・ログ管理チェックディスク機能の有効/無効設定組合せによる誤処理を修正(Cente障害情報:101-0115)
無効ドライブに対してもログ管理チェックディスクの処理が一部動作してしまう不具合及びエラー判定処理が抜けている箇所があり、正常/異常を正しく戻すことができていない不具合、セーブキャッシュが行われず、ログ管理ファイルを正しく作成することができない不具合を修正しました。

・ファイル及びディレクトリ検索にて大文字/小文字の区別をしていた不具合を修正(Cente障害情報:101-0116)
readdir_wc()及びreaddir_wc_uni()において、大文字/小文字の区別をしていた不具合を修正しました。

・ 独自ディレクトリ操作API実行時、ディレクトリの読出しに失敗する不具合を修正(Cente障害情報:101-0117)
独自ディレクトリ操作API実行時、セマフォの資源を獲得せずディレクトリの読出しをしていたため、修正しました。

・複数ドライブに対しメタデータ保護機能を有効にするとメモリ破壊が起きる不具合を修正(Cente障害情報:101-0118)
複数ドライブに対しメタデータ保護機能を有効にするとメモリ破壊が起きる不具合について、drv_name ごとに領域を確保するように修正いたしました。

・メタデータ保護機能使用時 残容量が必要以上に消費されてしまう不具合を修正(Cente障害情報:101-0119)
FATチェーンの更新した分だけ残容量を消費するだけでなく、既存のクラスタ情報を含めて更新していたため、既存のクラスタ情報を含めないように修正しました。

・メタデータ保護機能使用時 ディスクフル直前の書き込みで無限ループが発生する不具合を修正(Cente障害情報:101-0120)
ディスクフル直前のデバイスに書込みを行った際、FAT領域の空き確認処理で無限ループが発生する不具合を修正しました。

・FAT領域が1面の場合にフォーマットを行うと、キャッシュ領域を初期化できない不具合を修正(Cente障害情報:101-0121)
FAT数が1の時、キャッシュ領域の初期化が行われていなかった不具合を修正しました。

・フォーマット及びメタデータ保護機能の速度改善
フォーマット及びメタデータ保護機能の速度改善を行いました。詳しくは、「FileSystemユーザーズマニュアル(Ver6.50)導入・運用編.doc」の「3.6.23連続まとめ書込み機能の選択について」を参照ください。

・Non-OS時、fs_memory.cの静的バッファを追加
USE_OSにてNon-OS選択時、fs_memory.cの静的バッファを使用することで、動的に確保した時と同じくらいの速度でファイルのアクセスが可能となっております。詳しくは「FileSystemユーザーズマニュアル(Ver6.50)導入・運用編.doc」の「3.6.1 OS(Operating System)選択」及び「3.6.2 メモリ関連設定ファイルについて」を参照ください。

・軽微な修正
ワーニング抑制など軽微なコードの修正を行いました。

・RX71M用のbspを追加
RX71MのNORフラッシュbspを作成しました。

Page 1 of 17