diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2008-02-06 04:37:16 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-06 13:41:06 -0500 |
commit | 9cfe015aa424b3c003baba3841a60dd9b5ad319b (patch) | |
tree | 5575e06efcf91018f860f2db43979e8e91aba1c3 /arch | |
parent | 774ed22c21ab95d582dfff38560f11cf290baeb4 (diff) |
get rid of NR_OPEN and introduce a sysctl_nr_open
NR_OPEN (historically set to 1024*1024) actually forbids processes to open
more than 1024*1024 handles.
Unfortunatly some production servers hit the not so 'ridiculously high
value' of 1024*1024 file descriptors per process.
Changing NR_OPEN is not considered safe because of vmalloc space potential
exhaust.
This patch introduces a new sysctl (/proc/sys/fs/nr_open) wich defaults to
1024*1024, so that admins can decide to change this limit if their workload
needs it.
[akpm@linux-foundation.org: export it for sparc64]
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/kernel/osf_sys.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/sysirix.c | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/sparc64_ksyms.c | 1 | ||||
-rw-r--r-- | arch/sparc64/solaris/fs.c | 2 | ||||
-rw-r--r-- | arch/sparc64/solaris/timod.c | 6 |
5 files changed, 8 insertions, 5 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index 6413c5f23226..72f9a619a66d 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
@@ -430,7 +430,7 @@ sys_getpagesize(void) | |||
430 | asmlinkage unsigned long | 430 | asmlinkage unsigned long |
431 | sys_getdtablesize(void) | 431 | sys_getdtablesize(void) |
432 | { | 432 | { |
433 | return NR_OPEN; | 433 | return sysctl_nr_open; |
434 | } | 434 | } |
435 | 435 | ||
436 | /* | 436 | /* |
diff --git a/arch/mips/kernel/sysirix.c b/arch/mips/kernel/sysirix.c index 4c477c7ff74a..22fd41e946b2 100644 --- a/arch/mips/kernel/sysirix.c +++ b/arch/mips/kernel/sysirix.c | |||
@@ -356,7 +356,7 @@ asmlinkage int irix_syssgi(struct pt_regs *regs) | |||
356 | retval = NGROUPS_MAX; | 356 | retval = NGROUPS_MAX; |
357 | goto out; | 357 | goto out; |
358 | case 5: | 358 | case 5: |
359 | retval = NR_OPEN; | 359 | retval = sysctl_nr_open; |
360 | goto out; | 360 | goto out; |
361 | case 6: | 361 | case 6: |
362 | retval = 1; | 362 | retval = 1; |
diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c index 60765e314bd8..8649635d6d74 100644 --- a/arch/sparc64/kernel/sparc64_ksyms.c +++ b/arch/sparc64/kernel/sparc64_ksyms.c | |||
@@ -277,6 +277,7 @@ EXPORT_SYMBOL(sys_getpid); | |||
277 | EXPORT_SYMBOL(sys_geteuid); | 277 | EXPORT_SYMBOL(sys_geteuid); |
278 | EXPORT_SYMBOL(sys_getuid); | 278 | EXPORT_SYMBOL(sys_getuid); |
279 | EXPORT_SYMBOL(sys_getegid); | 279 | EXPORT_SYMBOL(sys_getegid); |
280 | EXPORT_SYMBOL(sysctl_nr_open); | ||
280 | EXPORT_SYMBOL(sys_getgid); | 281 | EXPORT_SYMBOL(sys_getgid); |
281 | EXPORT_SYMBOL(svr4_getcontext); | 282 | EXPORT_SYMBOL(svr4_getcontext); |
282 | EXPORT_SYMBOL(svr4_setcontext); | 283 | EXPORT_SYMBOL(svr4_setcontext); |
diff --git a/arch/sparc64/solaris/fs.c b/arch/sparc64/solaris/fs.c index 61be597bf430..9311bfe4f2f7 100644 --- a/arch/sparc64/solaris/fs.c +++ b/arch/sparc64/solaris/fs.c | |||
@@ -624,7 +624,7 @@ asmlinkage int solaris_ulimit(int cmd, int val) | |||
624 | case 3: /* UL_GMEMLIM */ | 624 | case 3: /* UL_GMEMLIM */ |
625 | return current->signal->rlim[RLIMIT_DATA].rlim_cur; | 625 | return current->signal->rlim[RLIMIT_DATA].rlim_cur; |
626 | case 4: /* UL_GDESLIM */ | 626 | case 4: /* UL_GDESLIM */ |
627 | return NR_OPEN; | 627 | return sysctl_nr_open; |
628 | } | 628 | } |
629 | return -EINVAL; | 629 | return -EINVAL; |
630 | } | 630 | } |
diff --git a/arch/sparc64/solaris/timod.c b/arch/sparc64/solaris/timod.c index a9d32ceabf26..f53123c02c2b 100644 --- a/arch/sparc64/solaris/timod.c +++ b/arch/sparc64/solaris/timod.c | |||
@@ -859,7 +859,8 @@ asmlinkage int solaris_getmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3) | |||
859 | 859 | ||
860 | SOLD("entry"); | 860 | SOLD("entry"); |
861 | lock_kernel(); | 861 | lock_kernel(); |
862 | if(fd >= NR_OPEN) goto out; | 862 | if (fd >= sysctl_nr_open) |
863 | goto out; | ||
863 | 864 | ||
864 | fdt = files_fdtable(current->files); | 865 | fdt = files_fdtable(current->files); |
865 | filp = fdt->fd[fd]; | 866 | filp = fdt->fd[fd]; |
@@ -927,7 +928,8 @@ asmlinkage int solaris_putmsg(unsigned int fd, u32 arg1, u32 arg2, u32 arg3) | |||
927 | 928 | ||
928 | SOLD("entry"); | 929 | SOLD("entry"); |
929 | lock_kernel(); | 930 | lock_kernel(); |
930 | if(fd >= NR_OPEN) goto out; | 931 | if (fd >= sysctl_nr_open) |
932 | goto out; | ||
931 | 933 | ||
932 | fdt = files_fdtable(current->files); | 934 | fdt = files_fdtable(current->files); |
933 | filp = fdt->fd[fd]; | 935 | filp = fdt->fd[fd]; |