summaryrefslogtreecommitdiffstats
path: root/fs/file.c
diff options
context:
space:
mode:
authorAndrew Morton2006-07-10 13:45:31 +0200
committerLinus Torvalds2006-07-10 22:24:25 +0200
commit92eb7a2f28d551acedeb5752263267a64b1f5ddf (patch)
treee77b0dee5598df8f44a6f57783a3344e2e4e98c1 /fs/file.c
parent[PATCH] char/rtc: Handle memory-mapped chips properly (diff)
downloadkernel-qcow2-linux-92eb7a2f28d551acedeb5752263267a64b1f5ddf.tar.gz
kernel-qcow2-linux-92eb7a2f28d551acedeb5752263267a64b1f5ddf.tar.xz
kernel-qcow2-linux-92eb7a2f28d551acedeb5752263267a64b1f5ddf.zip
[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>
Diffstat (limited to 'fs/file.c')
-rw-r--r--fs/file.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/file.c b/fs/file.c
index 55f4e7022563..3f356086061d 100644
--- a/fs/file.c
+++ b/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);