[sugj-tech:6908] SambaのDISK FULLバグ

Samba-JP oota ribbon @ samba.gr.jp
2007年 1月 29日 (月) 12:54:14 JST


太田@さんばです。

以下、Sambaのバグの連絡があり、その情報について公開してもよいということなので
ここに報告します。

1. 条件

Samba 3.0.xで2TB以上のファイルシステムを使う場合。

2. 現象

Windows2003からエクスプローラでファイルをコピーすると、ディスク容量があるのに

"エラー:空きディスク領域が足りません"

というエラーメッセージが表示される。

Windows2003で常時発生する。

3. 原因

#以下は情報提供元からのメッセージをそのまま引用します。

samba でファイルシステムの空き容量を計算する部分で、計算結果を
格納する変数に int を使用している部分があり、ファイルシステム
サイズが大きい場合に、桁あふれを起こし、空き容量が足りないと
判断して、DISK FULL を返しています。

-------- 参考

具体的には、dfree_retval の変数が int となっており、最後の空き容量を
計算する部分で、桁あふれを起こして、空き容量が0として返されてしまって
います。 dfree_retval を SMB_BIG_UINT (unsigned long long) に変更
することで、この問題が起こらなくなることが確認できました。

------ quote of smbd/dfree.c
static SMB_BIG_UINT disk_free(const char *path, BOOL small_query,
        SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) {
    int dfree_retval;
... snip ...

    if ((*bsize) < 1024) {
        dfree_retval = (*dfree)/(1024/(*bsize));
    } else {
        dfree_retval = ((*bsize)/1024)*(*dfree);
    }

    return(dfree_retval);
}
------ unquote

4. その他

ちょっとbugzilla を見てみましたが、該当するような障害はないようです。



sugj-tech メーリングリストの案内