[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:
Родитель
38e0e8c055
Коммит
92eb7a2f28
10
fs/file.c
10
fs/file.c
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче