summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-12-02 10:01:14 -0800
committerJeremy Allison <jra@samba.org>2009-12-02 10:01:14 -0800
commitb6fdecd11210a3d2ff803bdc315aacd9f8b445a1 (patch)
treef182933a4e5e381d402a1a266d980d0182e58d58
parent5f60855ba2eb822dcb867378ff09278c42931b89 (diff)
downloadsamba-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.h20
-rw-r--r--source3/param/loadparm.c16
-rw-r--r--source3/smbd/files.c2
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();