diff options
author | Jeremy Allison <jra@samba.org> | 2009-12-02 10:01:14 -0800 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2009-12-02 10:01:14 -0800 |
commit | b6fdecd11210a3d2ff803bdc315aacd9f8b445a1 (patch) | |
tree | f182933a4e5e381d402a1a266d980d0182e58d58 | |
parent | 5f60855ba2eb822dcb867378ff09278c42931b89 (diff) | |
download | samba-b6fdecd11210a3d2ff803bdc315aacd9f8b445a1.tar.gz samba-b6fdecd11210a3d2ff803bdc315aacd9f8b445a1.tar.bz2 samba-b6fdecd11210a3d2ff803bdc315aacd9f8b445a1.zip |
Fix bug #6837 - "Too many open files" when trying to access large number of files
from Windows 7. Original patch by me fixed up with the correct open files number
by jmaggard10@hotmail.com.
Jeremy.
-rw-r--r-- | source3/include/local.h | 20 | ||||
-rw-r--r-- | source3/param/loadparm.c | 16 | ||||
-rw-r--r-- | source3/smbd/files.c | 2 |
3 files changed, 35 insertions, 3 deletions
diff --git a/source3/include/local.h b/source3/include/local.h index 45767ad1c1..de54ea5886 100644 --- a/source3/include/local.h +++ b/source3/include/local.h @@ -66,7 +66,25 @@ #ifndef MAX_OPEN_FILES #define MAX_OPEN_FILES 10000 #endif - + +/* + * Fudgefactor required for open tdb's, etc. + */ + +#ifndef MAX_OPEN_FUDGEFACTOR +#define MAX_OPEN_FUDGEFACTOR 20 +#endif + +/* + * Minimum number of open files needed for Windows7 to + * work correctly. A little conservative but better that + * than run out of fd's. + */ + +#ifndef MIN_OPEN_FILES_WINDOWS +#define MIN_OPEN_FILES_WINDOWS 1050 +#endif + #define WORDMAX 0xFFFF /* the maximum password length before we declare a likely attack */ diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index a1f5328763..3d426ecf3b 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -4739,6 +4739,22 @@ static int max_open_files(void) #endif #endif + if (sysctl_max < MIN_OPEN_FILES_WINDOWS) { + DEBUG(2,("max_open_files: sysctl_max (%d) below " + "minimum Windows limit (%d)\n", + sysctl_max, + MIN_OPEN_FILES_WINDOWS)); + sysctl_max = MIN_OPEN_FILES_WINDOWS; + } + + if (rlimit_max < MIN_OPEN_FILES_WINDOWS) { + DEBUG(2,("rlimit_max: rlimit_max (%d) below " + "minimum Windows limit (%d)\n", + rlimit_max, + MIN_OPEN_FILES_WINDOWS)); + rlimit_max = MIN_OPEN_FILES_WINDOWS; + } + return MIN(sysctl_max, rlimit_max); } diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 2bc5ba6816..455666f8df 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -171,8 +171,6 @@ void file_close_pid(uint16 smbpid, int vuid) Initialise file structures. ****************************************************************************/ -#define MAX_OPEN_FUDGEFACTOR 20 - void file_init(void) { int request_max_open_files = lp_max_open_files(); |