提交 92eb7a2f 编写于 作者: A Andrew Morton 提交者: Linus Torvalds

[PATCH] fix weird logic in alloc_fdtable()

There's a fairly obvious infinite loop in there.

Also, use roundup_pow_of_two() rather than open-coding stuff.

Cc: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 38e0e8c0
...@@ -240,13 +240,9 @@ static struct fdtable *alloc_fdtable(int nr) ...@@ -240,13 +240,9 @@ static struct fdtable *alloc_fdtable(int nr)
if (!fdt) if (!fdt)
goto out; goto out;
nfds = 8 * L1_CACHE_BYTES; nfds = max_t(int, 8 * L1_CACHE_BYTES, roundup_pow_of_two(nfds));
/* Expand to the max in easy steps */
while (nfds <= nr) {
nfds = nfds * 2;
if (nfds > NR_OPEN) if (nfds > NR_OPEN)
nfds = NR_OPEN; nfds = NR_OPEN;
}
new_openset = alloc_fdset(nfds); new_openset = alloc_fdset(nfds);
new_execset = alloc_fdset(nfds); new_execset = alloc_fdset(nfds);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册