summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-09-06 01:37:14 +0000
committerAndrew Tridgell <tridge@samba.org>1998-09-06 01:37:14 +0000
commit4fc5a74ffa491d52afc373abcdd4257a4f105aa4 (patch)
treec6eb9af27052997cfc8c49a2c23f637cc30314b2
parentfd33412fa0ebd7de6c8749caeb111bdf4390dd47 (diff)
downloadsamba-4fc5a74ffa491d52afc373abcdd4257a4f105aa4.tar.gz
samba-4fc5a74ffa491d52afc373abcdd4257a4f105aa4.tar.bz2
samba-4fc5a74ffa491d52afc373abcdd4257a4f105aa4.zip
add a "stat cache" boolean smb.conf option. (defaults to on)
I think we need this so we can rule out stat cache bugs when dealing with bug reports. If we ask a user to disable the stat cache and the problem persists then we know it isn't a stat cache bug. The stat cache code is sufficiently complicated that it can be pretty hard to tell if it is causing problems or not. (This used to be commit c83f3775cd8a7aad13571926cdd5949a07538771)
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/param/loadparm.c4
-rw-r--r--source3/smbd/filename.c12
3 files changed, 15 insertions, 2 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 7430affd34..a7581ced79 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -926,6 +926,7 @@ BOOL lp_unix_password_sync(void);
BOOL lp_passwd_chat_debug(void);
BOOL lp_ole_locking_compat(void);
BOOL lp_nt_smb_support(void);
+BOOL lp_stat_cache(void);
int lp_os_level(void);
int lp_max_ttl(void);
int lp_max_wins_ttl(void);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 8e759cbbb0..fe3cf2f06a 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -228,6 +228,7 @@ typedef struct
BOOL bOleLockingCompat;
BOOL bTimestampLogs;
BOOL bNTSmbSupport;
+ BOOL bStatCache;
} global;
static global Globals;
@@ -643,6 +644,7 @@ static struct parm_struct parm_table[] =
{"map archive", P_BOOL, P_LOCAL, &sDefault.bMap_archive, NULL, NULL, FLAG_GLOBAL},
{"mangled names", P_BOOL, P_LOCAL, &sDefault.bMangledNames, NULL, NULL, FLAG_GLOBAL},
{"mangled map", P_STRING, P_LOCAL, &sDefault.szMangledMap, NULL, NULL, FLAG_GLOBAL},
+ {"stat cache", P_BOOL, P_GLOBAL, &Globals.bStatCache, NULL, NULL, 0},
{"Domain Options", P_SEP, P_SEPARATOR},
{"domain sid", P_USTRING, P_GLOBAL, &Globals.szDomainSID, NULL, NULL, 0},
@@ -850,6 +852,7 @@ static void init_globals(void)
Globals.bPasswdChatDebug = False;
Globals.bOleLockingCompat = True;
Globals.bNTSmbSupport = True; /* Do NT SMB's by default. */
+ Globals.bStatCache = True; /* use stat cache by default */
#ifdef WITH_LDAP
/* default values for ldap */
@@ -1135,6 +1138,7 @@ FN_GLOBAL_BOOL(lp_unix_password_sync,&Globals.bUnixPasswdSync)
FN_GLOBAL_BOOL(lp_passwd_chat_debug,&Globals.bPasswdChatDebug)
FN_GLOBAL_BOOL(lp_ole_locking_compat,&Globals.bOleLockingCompat)
FN_GLOBAL_BOOL(lp_nt_smb_support,&Globals.bNTSmbSupport)
+FN_GLOBAL_BOOL(lp_stat_cache,&Globals.bStatCache)
FN_GLOBAL_INTEGER(lp_os_level,&Globals.os_level)
FN_GLOBAL_INTEGER(lp_max_ttl,&Globals.max_ttl)
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index ee9ce3f835..a88829de9d 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -150,7 +150,11 @@ static void stat_cache_add( char *full_orig_name, char *orig_translated_path)
stat_cache_entry *scp;
pstring orig_name;
pstring translated_path;
- int namelen = strlen(orig_translated_path);
+ int namelen;
+
+ if (!lp_stat_cache()) return;
+
+ namelen = strlen(orig_translated_path);
/*
* Don't cache trivial valid directory entries.
@@ -235,8 +239,12 @@ static BOOL stat_cache_lookup( char *name, char *dirpath, char **start, SMB_STRU
{
stat_cache_entry *scp;
stat_cache_entry *longest_hit = NULL;
- int namelen = strlen(name);
+ int namelen;
+
+ if (!lp_stat_cache()) return False;
+ namelen = strlen(name);
+
*start = name;
global_stat_cache_lookups++;