[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: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Andrew Morton 2006-07-10 04:45:31 -07:00 committed by Linus Torvalds
parent 38e0e8c055
commit 92eb7a2f28

View File

@ -240,13 +240,9 @@ static struct fdtable *alloc_fdtable(int nr)
if (!fdt)
goto out;
nfds = 8 * L1_CACHE_BYTES;
/* Expand to the max in easy steps */
while (nfds <= nr) {
nfds = nfds * 2;
if (nfds > NR_OPEN)
nfds = NR_OPEN;
}
nfds = max_t(int, 8 * L1_CACHE_BYTES, roundup_pow_of_two(nfds));
if (nfds > NR_OPEN)
nfds = NR_OPEN;
new_openset = alloc_fdset(nfds);
new_execset = alloc_fdset(nfds);