1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-13 13:18:06 +03:00

added a function set_maxfiles() to set our file rlimit to the max

possible and return the max.
This commit is contained in:
Andrew Tridgell 0001-01-01 00:00:00 +00:00
parent 6a1b346d98
commit 7a7b5ee168
4 changed files with 33 additions and 26 deletions

View File

@ -347,6 +347,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);
/*The following definitions come from libsmb/clientgen.c */

View File

@ -4845,3 +4845,26 @@ void zero_free(void *p, size_t size)
free(p);
}
/*****************************************************************
set our open file limit to the max and return the limit
*****************************************************************/
int set_maxfiles(void)
{
#if (defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE))
struct rlimit rlp;
getrlimit(RLIMIT_NOFILE, &rlp);
/* Set the fd limit to be real_max_open_files + MAX_OPEN_FUDGEFACTOR to
* account for the extra fd we need
* as well as the log files and standard
* handles etc. */
rlp.rlim_cur = rlp.rlim_max;
setrlimit(RLIMIT_NOFILE, &rlp);
getrlimit(RLIMIT_NOFILE, &rlp);
return rlp.rlim_cur;
#else
/* just guess ... */
return 1024;
#endif
}

View File

@ -202,38 +202,19 @@ initialise file structures
void file_init(void)
{
real_max_open_files = lp_max_open_files();
int real_max_open_files, lim;
#if (defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE))
{
struct rlimit rlp;
getrlimit(RLIMIT_NOFILE, &rlp);
/* Set the fd limit to be real_max_open_files + MAX_OPEN_FUDGEFACTOR to
* account for the extra fd we need
* as well as the log files and standard
* handles etc. */
rlp.rlim_cur = (real_max_open_files+MAX_OPEN_FUDGEFACTOR>rlp.rlim_max)?
rlp.rlim_max:real_max_open_files+MAX_OPEN_FUDGEFACTOR;
setrlimit(RLIMIT_NOFILE, &rlp);
getrlimit(RLIMIT_NOFILE, &rlp);
if(rlp.rlim_cur != (real_max_open_files + MAX_OPEN_FUDGEFACTOR))
DEBUG(0,("file_init: Maximum number of open files requested per session \
was %d, actual files available per session = %d\n",
real_max_open_files, (int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR ));
DEBUG(2,("Maximum number of open files per session is %d\n",
(int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR));
real_max_open_files = (int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR;
}
#endif
lim = set_maxfiles();
lim = MIN(lim, lp_max_open_files());
real_max_open_files = lim - MAX_OPEN_FUDGEFACTOR;
file_bmap = bitmap_allocate(real_max_open_files);
if (!file_bmap) {
exit_server("out of memory in file_init");
}
/*
* Ensure that pipe_handle_oppset is set correctly.
*/

View File

@ -87,6 +87,8 @@ void smbw_init(void)
DEBUG(4,("Initial cwd from getwd is %s\n", smb_cwd));
}
smbw_busy--;
set_maxfiles();
}
/*****************************************************