Commit 92eb7a2f authored by Andrew Morton's avatar Andrew Morton Committed by 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: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 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%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment