diff options
Diffstat (limited to 'fs/file.c')
| -rw-r--r-- | fs/file.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| @@ -24,6 +24,8 @@ struct fdtable_defer { | |||
| 24 | struct fdtable *next; | 24 | struct fdtable *next; | 
| 25 | }; | 25 | }; | 
| 26 | 26 | ||
| 27 | int sysctl_nr_open __read_mostly = 1024*1024; | ||
| 28 | |||
| 27 | /* | 29 | /* | 
| 28 | * We use this list to defer free fdtables that have vmalloced | 30 | * We use this list to defer free fdtables that have vmalloced | 
| 29 | * sets/arrays. By keeping a per-cpu list, we avoid having to embed | 31 | * 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) | |||
| 147 | nr /= (1024 / sizeof(struct file *)); | 149 | nr /= (1024 / sizeof(struct file *)); | 
| 148 | nr = roundup_pow_of_two(nr + 1); | 150 | nr = roundup_pow_of_two(nr + 1); | 
| 149 | nr *= (1024 / sizeof(struct file *)); | 151 | nr *= (1024 / sizeof(struct file *)); | 
| 150 | if (nr > NR_OPEN) | 152 | if (nr > sysctl_nr_open) | 
| 151 | nr = NR_OPEN; | 153 | nr = sysctl_nr_open; | 
| 152 | 154 | ||
| 153 | fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL); | 155 | fdt = kmalloc(sizeof(struct fdtable), GFP_KERNEL); | 
| 154 | if (!fdt) | 156 | if (!fdt) | 
| @@ -233,7 +235,7 @@ int expand_files(struct files_struct *files, int nr) | |||
| 233 | if (nr < fdt->max_fds) | 235 | if (nr < fdt->max_fds) | 
| 234 | return 0; | 236 | return 0; | 
| 235 | /* Can we expand? */ | 237 | /* Can we expand? */ | 
| 236 | if (nr >= NR_OPEN) | 238 | if (nr >= sysctl_nr_open) | 
| 237 | return -EMFILE; | 239 | return -EMFILE; | 
| 238 | 240 | ||
| 239 | /* All good, so we try */ | 241 | /* All good, so we try */ | 
