/* Don't allow the degenerate cases */
if (!(old_len | new_len))
goto out;
2.4の場合はこちら
/*
* Allow new_len == 0 only if new_addr == addr
* to preserve truncation in place (that was working
* safe and some app may depend on it).
*/
if (unlikely(!new_len && new_addr != addr))
goto out;
どういった対策がなされたか (スコア:4, 参考になる)
Linuxはどうだとかいう話で白熱してるようですけど
どういった変更が加えられたか追ってみようと人はいないのかな
2.6の場合はmremap.cにこれを加えただけです
/* Don't allow the degenerate cases */
if (!(old_len | new_len))
goto out;
2.4の場合はこちら
/*
* Allow new_len == 0 only if new_addr == addr
* to preserve truncation in place (that was working
* safe and some app may depend on it).
*/
if (unlikely(!new_len && new_addr != addr))
goto out;
Re:どういった対策がなされたか (スコア:2, 参考になる)
- if (!(old_len | new_len))
+ if (!old_len || !new_len)
修正したLinus自身が誤りを認めています [theaimsgroup.com]。
Re:どういった対策がなされたか (スコア:1)
Change Log [kernel.org]には以下の洒落た文章が記述されています ;-)
Re:どういった対策がなされたか (スコア:0)
>> if (!(old_len | new_len))
>> goto out;
gentoo の gs-source の最新版(2.4.23_pre8-r2)は上記のように
なっていますが、間違ったままと考えていいんでしょうか?
Re:どういった対策がなされたか (スコア:0)
ひっどいコードだね、それ。
と書いて欲しいぞ。
Re:どういった対策がなされたか (スコア:1)
まー最適化されれば同じなのかもしれませんね。
Re:どういった対策がなされたか (スコア:1)
# ごくごく普通の書き方だと思ったりする自分は終わってるんだろうな、などと釣られてみる
-- Takehiro TOMINAGA // may the source be with you!
Re:どういった対策がなされたか (スコア:0)
if (old_len == 0 && new_len == 0)に
した所で体感出来るほどは遅くはならないだろうし
意味が分かりやすいように書いた方が後で読みやすいと思う。
#近い将来にコンパイラが解決出来る問題なら尚更。
Re:どういった対策がなされたか (スコア:2, 興味深い)
あと結構古いgccしか使えないという人も意外と多かったりする。gccのサポートが切れてしまったアーキテクチャとかいった本質的なのとかどうでもいいような理由とかで。
今回みたいな場面でこういう書き方がアレだというのはまったくもってその通りなんですが。ええ。
-- Takehiro TOMINAGA // may the source be with you!