テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(writeboost report) mampool_allocって__GFP_ZERO渡しちゃいけなかったんすね

昨日, ももんがの人から, Writeboostを初期化中にワーニングが出る!との訴えがあり, Twitter越しに調査すること1H, 大体理由がわかった.

ワーニング自体については, CONFIG_DEBUG_VM set & mempool_alloc()に__GFP_ZEROを渡すとワーニングになるコードが今年の5月当たりに入ってた. 今まで, このオプションはunsetしてたので気付かなかった. 他のmempool_alloc呼び出しを検索しても, 全部正しく使われていて, なんだよライトブーストだけかよと寂しくなった. こんな簡単なミス, アップストリームに入ってたら自動的に修正されていたに違いない.

このワーニングは, ただワーニングなだけでなくて, 本当にバグだ. mempool_allocに__GFP_ZEROを渡してゼロ埋めしてくれる論理を期待しても, そうはならない. 従って, 今までおれは, 「良くわからない値でキャッシュをフォーマットして何となく動いていた」ということになる. 断っておくと, キャッシュを一度壊してから再度デバイスから復元するテストはそこかしこで行われている. たぶん, OS立ち上がり後にテストを開始しているからとか, そういう理由でたまたまゼロだったのではないかと思っている. だとすると, ライトブーストは大抵の場合, OS立ち上がり後にいきなりデバイス作成するものだから, 初期化に限定していうと, 問題にならないっちゃあ問題にならないが, メモリが少ない環境とかだとそれ以前に使いまわされた結果汚れるということが起こったりするのだろうか?分からんが, とにかくバグだ.

という感じのことをMLに投げて,

[dm-devel] [BUG] dm-writeboost: Don't pass __GFP_ZERO to mempool_alloc()

今朝, プルリクも投げておいた.

[writeboost] Don't pass __GFP_ZERO to mempool_alloc() by akiradeveloper · Pull Request #21 · jthornber/linux-2.6 · GitHub

マージされるまでは, こちらを当てるなりすればよい.

https://github.com/akiradeveloper/linux-2.6/commit/ef7fffab7222951bf76d034f669241f6e7dbfbfd.patch

ライトブーストを使ってみて, 何かバグがあったら, 今回のようにGistに症状をまとめた上でTwitterで報告してもいいし, dm-develに報告してもいい. 今後, ライトブーストの活動は逐一dm-develに上げる必要がある.