akiradeveloper / dm-writeboost

Log-structured Caching for Linux
GNU General Public License v2.0
123 stars 19 forks source link

fixed issue: can not compile with linux-4.13 #178

Closed meke closed 7 years ago

meke commented 7 years ago

Linux-4.13でコンパイルできなくなったので、パッチに問題が無ければマージををお願いします。

エラー内容はこのような物でした

  CC [M]  /home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.o
/home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.c: In function 'bio_endio_compat':
/home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.c:116:7: error: 'struct bio' has no member named 'bi_error'; did you mean 'bi_iter'?
  bio->bi_error = error;
       ^~~~~~~~
       bi_iter
/home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.c: At top level:
/home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.c:1946:12: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
  .end_io = writeboost_end_io,
            ^~~~~~~~~~~~~~~~~
/home/meke/build/trunk/pkgs/kernel/BUILD/kernel-4.13/dm-writeboost-2.2.7/src/dm-writeboost-target.c:1946:12: note: (near initialization for 'writeboost_target.end_io')
cc1: some warnings being treated as errors
akiradeveloper commented 7 years ago

@meke

bi_endio_compatですが,

https://github.com/torvalds/linux/commit/4e4cbee93d5

このコミットを見ると, bi_statusにはintではなくBLK_STS_IOERRORなどの値が入るようです.

今カーネルのソースコードがないのでわかりませんが, このパッチによると, errno_to_blk_statusという関数がこの変換を担保していた時期があるようなのでこれを使えばいいかも知れませんが, どうやら逆関数もあることからerrorからstatusに移るまでの過渡的な状況があったと推察出来ますから, 正しいコードかはわかりません.

https://www.redhat.com/archives/dm-devel/2017-June/msg00098.html

1つの方針としては, bi_endio_compatはどうせ成功させるためにしか使っていないため, intをとることをやめて, 成功に相当する値を関数の内部で入れてしまうということです. この場合, bi_endio_success_compatなどと名前は変えた方がいいものと思います. なぜならば, endioがintをとることがふつうなので, とらないならば特別な名前をつけるべきだからです.

逆に, 失敗した場合についてはbio_io_errorを使っていて, これは今の世界でも推奨されているっぽいので,

https://www.spinics.net/lists/raid/msg58504.html

成功した場合についてintを潰すという方針自体は良かろうという気はします. あるいはそういう関数が存在するならそれを使いたいです.

とはいえ, 私の方で一回コードをちゃんと調べてどういう修正にするのが将来的に良さそうか考えようと思いますので, しばらくおまちください.

akiradeveloper commented 7 years ago

The transition from traditional int error to status has been done in 4.13. This commit helps us to find out the best change to Writeboost.

https://github.com/torvalds/linux/commit/2a842acab109f40f0d7d10b38e9ca88390628996#diff-bd4811706a8d71334f8f07cc135455eb

meke commented 7 years ago

error変数は使ってないし、型を合わせれば良いやろ。と、温い対応をしてました。 2.2.8のリリースを待っています!

このプルリクはクローズとさせてもらいます

akiradeveloper commented 7 years ago

This issue is fixed in v2.2.8