2009年9月14日月曜日

YAFFS2のENAMETOOLONG

 

YAFFS2(Yet Another Flash File System 2)は、主にNAND用に作られた、
Flash Memory用のファイルシステムです。

Flash用としてはきっとJFFS2(Journaling Flash File System 2)の方が有名でしょうし、
組み込みの開発してる方々はよく使用されてるんじゃないでしょうか。

YAFFS2の方が(unmountさえしていれば)mount時間が圧倒的に早いので、
Shutdownをきちんと何らかの方法で行えるのであればJFFS2よりも快適です。

 

そんな説明は、こーいう詳しいサイトにお任せするとして・・・

先日仕事中に気付いたのですが、このYAFFS2はなんと、
256byte以上の名前のファイルを作成してもエラーにならない!
のです。

それどころか255byte目の文字で途切れてしまって、
アクセスし辛いファイルが出来あがってしまいます。

ext2がそうだったような・・・・。

最近のファイルシステムは長すぎる名前でファイルを作成しようとすると、
ENAMETOOLONGというエラーを返すようになっています。

YAFFS公式サイトのリポジトリに入っているソースを確認しましたが、
対応していなさそうなので勝手に埋め込んでみました。

 

作成したpatch :

diff -ur yaffs2_org/yaffs_fs.c yaffs2/yaffs_fs.c
--- yaffs2_org/yaffs_fs.c    2009-05-26 10:22:44.000000000 +0900
+++ yaffs2/yaffs_fs.c    2009-09-14 10:38:27.000000000 +0900
@@ -448,6 +448,10 @@
     yaffs_Object *obj;
     struct inode *inode = NULL;    /* NCB 2.5/2.6 needs NULL here */

+    if (dentry->d_name.len > YAFFS_MAX_NAME_LENGTH) {
+        return ERR_PTR(-ENAMETOOLONG);
+    }
+
     yaffs_Device *dev = yaffs_InodeToObject(dir)->myDev;

     yaffs_GrossLock(dev);

 

大したことはしてません。
ENAMETOOLONGを返すようにしただけです。  

# Windows Live Writer の File Uploadプラグインを初めて使ってみたんですが、
# 投稿時に見事に跳ねられましたTT
# ファイルサーバ用意するのも面倒だし、今回はそのまま貼り付け。

 

日本語でググっても引っかからないところをみると、
ものすんごくマイナーなのかな・・・w

ファイル名の長さなんか誰か気付いてそうな気もするんだけどなぁ・・・。

はっ!? 実は元々こーいう仕様でエラー返す方が間違い?
それはそれで気持ち悪いけど、まーいいかw

0 件のコメント:

コメントを投稿