aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorEric Dumazet <dada1@cosmosbay.com>2008-02-06 04:37:16 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-06 13:41:06 -0500
commit9cfe015aa424b3c003baba3841a60dd9b5ad319b (patch)
tree5575e06efcf91018f860f2db43979e8e91aba1c3 /arch
parent774ed22c21ab95d582dfff38560f11cf290baeb4 (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.c2
-rw-r--r--arch/mips/kernel/sysirix.c2
-rw-r--r--arch/sparc64/kernel/sparc64_ksyms.c1
-rw-r--r--arch/sparc64/solaris/fs.c2
-rw-r--r--arch/sparc64/solaris/timod.c6
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)
430asmlinkage unsigned long 430asmlinkage unsigned long
431sys_getdtablesize(void) 431sys_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);
277EXPORT_SYMBOL(sys_geteuid); 277EXPORT_SYMBOL(sys_geteuid);
278EXPORT_SYMBOL(sys_getuid); 278EXPORT_SYMBOL(sys_getuid);
279EXPORT_SYMBOL(sys_getegid); 279EXPORT_SYMBOL(sys_getegid);
280EXPORT_SYMBOL(sysctl_nr_open);
280EXPORT_SYMBOL(sys_getgid); 281EXPORT_SYMBOL(sys_getgid);
281EXPORT_SYMBOL(svr4_getcontext); 282EXPORT_SYMBOL(svr4_getcontext);
282EXPORT_SYMBOL(svr4_setcontext); 283EXPORT_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];