diff options
| author | David Woodhouse <dwmw2@infradead.org> | 2006-08-30 23:30:38 +0100 |
|---|---|---|
| committer | David Woodhouse <dwmw2@infradead.org> | 2006-08-30 23:30:38 +0100 |
| commit | 0a7d5f8ce960e74fa22986bda4af488539796e49 (patch) | |
| tree | e29ad17808a5c3410518e22dae8dfe94801b59f3 /fs/file.c | |
| parent | 0165508c80a2b5d5268d9c5dfa9b30c534a33693 (diff) | |
| parent | dc709bd190c130b299ac19d596594256265c042a (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'fs/file.c')
| -rw-r--r-- | fs/file.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/fs/file.c b/fs/file.c index 55f4e7022563..b3c6b82e6a9d 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(nr + 1)); + if (nfds > NR_OPEN) + nfds = NR_OPEN; new_openset = alloc_fdset(nfds); new_execset = alloc_fdset(nfds); @@ -277,11 +273,13 @@ static struct fdtable *alloc_fdtable(int nr) } while (nfds <= nr); new_fds = alloc_fd_array(nfds); if (!new_fds) - goto out; + goto out2; fdt->fd = new_fds; fdt->max_fds = nfds; fdt->free_files = NULL; return fdt; +out2: + nfds = fdt->max_fdset; out: if (new_openset) free_fdset(new_openset, nfds); |
