|
@@ -24,6 +24,8 @@ struct fdtable_defer {
|
|
|
struct fdtable *next;
|
|
|
};
|
|
|
|
|
|
+int sysctl_nr_open __read_mostly = 1024*1024;
|
|
|
+
|
|
|
/*
|
|
|
* We use this list to defer free fdtables that have vmalloced
|
|
|
* sets/arrays. By keeping a per-cpu list, we avoid having to embed
|
|
@@ -147,8 +149,8 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
|
|
|
nr /= (1024 / sizeof(struct file *));
|
|
|
nr = roundup_pow_of_two(nr + 1);
|
|
|
nr *= (1024 / sizeof(struct file *));
|
|
|
- if (nr > NR_OPEN)
|
|
|
- nr = NR_OPEN;
|
|
|
+ if (nr > sysctl_nr_open)
|
|
|
+ nr = sysctl_nr_open;
|
|
|
|
|
|
fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL);
|
|
|
if (!fdt)
|
|
@@ -233,7 +235,7 @@ int expand_files(struct files_struct *files, int nr)
|
|
|
if (nr < fdt->max_fds)
|
|
|
return 0;
|
|
|
/* Can we expand? */
|
|
|
- if (nr >= NR_OPEN)
|
|
|
+ if (nr >= sysctl_nr_open)
|
|
|
return -EMFILE;
|
|
|
|
|
|
/* All good, so we try */
|