aboutsummaryrefslogtreecommitdiffstats
path: root/fs/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/file.c')
-rw-r--r--fs/file.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/file.c b/fs/file.c
index 3f356086061d..b3c6b82e6a9d 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -240,7 +240,7 @@ static struct fdtable *alloc_fdtable(int nr)
240 if (!fdt) 240 if (!fdt)
241 goto out; 241 goto out;
242 242
243 nfds = max_t(int, 8 * L1_CACHE_BYTES, roundup_pow_of_two(nfds)); 243 nfds = max_t(int, 8 * L1_CACHE_BYTES, roundup_pow_of_two(nr + 1));
244 if (nfds > NR_OPEN) 244 if (nfds > NR_OPEN)
245 nfds = NR_OPEN; 245 nfds = NR_OPEN;
246 246
@@ -273,11 +273,13 @@ static struct fdtable *alloc_fdtable(int nr)
273 } while (nfds <= nr); 273 } while (nfds <= nr);
274 new_fds = alloc_fd_array(nfds); 274 new_fds = alloc_fd_array(nfds);
275 if (!new_fds) 275 if (!new_fds)
276 goto out; 276 goto out2;
277 fdt->fd = new_fds; 277 fdt->fd = new_fds;
278 fdt->max_fds = nfds; 278 fdt->max_fds = nfds;
279 fdt->free_files = NULL; 279 fdt->free_files = NULL;
280 return fdt; 280 return fdt;
281out2:
282 nfds = fdt->max_fdset;
281out: 283out:
282 if (new_openset) 284 if (new_openset)
283 free_fdset(new_openset, nfds); 285 free_fdset(new_openset, nfds);