Commit 92eb7a2f authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds
Browse files

[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
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -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;
	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);