diff options
-rw-r--r-- | source3/include/proto.h | 4 | ||||
-rw-r--r-- | source3/lib/util.c | 12 | ||||
-rw-r--r-- | source3/smbd/files.c | 20 | ||||
-rw-r--r-- | source3/smbwrapper/smbw.c | 2 |
4 files changed, 25 insertions, 13 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 09fe5b0873..d563db3933 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -351,7 +351,7 @@ char *sid_to_string(pstring sidstr_out, DOM_SID *sid); BOOL string_to_sid(DOM_SID *sidout, char *sidstr); int str_checksum(const char *s); void zero_free(void *p, size_t size); -int set_maxfiles(void); +int set_maxfiles(int requested_max); /*The following definitions come from libsmb/clientgen.c */ @@ -1189,7 +1189,7 @@ BOOL trust_password_unlock(void); BOOL trust_password_delete( char *domain, char *name ); BOOL get_trust_account_password( unsigned char *ret_pwd, time_t *pass_last_set_time); BOOL set_trust_account_password( unsigned char *md4_new_pwd); -BOOL trust_get_passwd( unsigned char trust_passwd[16], char *myname, char *domain); +BOOL trust_get_passwd( unsigned char trust_passwd[16], char *domain, char *myname); /*The following definitions come from printing/pcap.c */ diff --git a/source3/lib/util.c b/source3/lib/util.c index c1307336cc..d0cb51f3ca 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -4849,9 +4849,9 @@ void zero_free(void *p, size_t size) /***************************************************************** -set our open file limit to the max and return the limit +set our open file limit to a requested max and return the limit *****************************************************************/ -int set_maxfiles(void) +int set_maxfiles(int requested_max) { #if (defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)) struct rlimit rlp; @@ -4860,13 +4860,15 @@ int set_maxfiles(void) * account for the extra fd we need * as well as the log files and standard * handles etc. */ - rlp.rlim_cur = rlp.rlim_max; + rlp.rlim_cur = MIN(requested_max,rlp.rlim_max); setrlimit(RLIMIT_NOFILE, &rlp); getrlimit(RLIMIT_NOFILE, &rlp); return rlp.rlim_cur; #else - /* just guess ... */ - return 1024; + /* + * No way to know - just guess... + */ + return requested_max; #endif } diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 4030ad4c49..c369a45bab 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -202,13 +202,23 @@ initialise file structures void file_init(void) { - int lim; + int request_max_open_files = lp_max_open_files(); + int real_lim; - lim = set_maxfiles(); - lim = MIN(lim, lp_max_open_files()); + /* + * Set the max_open files to be the requested + * max plus a fudgefactor to allow for the extra + * fd's we need such as log files etc... + */ + real_lim = set_maxfiles(request_max_open_files + MAX_OPEN_FUDGEFACTOR); + + real_max_open_files = real_lim - MAX_OPEN_FUDGEFACTOR; + + if(real_max_open_files != request_max_open_files) { + DEBUG(1,("file_init: Information only: requested %d \ +open files, %d are available.\n", request_max_open_files, real_max_open_files)); + } - real_max_open_files = lim - MAX_OPEN_FUDGEFACTOR; - file_bmap = bitmap_allocate(real_max_open_files); if (!file_bmap) { diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c index d9ff6daa05..9c690ac5fb 100644 --- a/source3/smbwrapper/smbw.c +++ b/source3/smbwrapper/smbw.c @@ -100,7 +100,7 @@ void smbw_init(void) } smbw_busy--; - set_maxfiles(); + set_maxfiles(lp_max_open_files()+10); errno = eno; } |