]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
add a "stat cache" boolean smb.conf option. (defaults to on)
authorAndrew Tridgell <tridge@samba.org>
Sun, 6 Sep 1998 01:37:14 +0000 (01:37 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 6 Sep 1998 01:37:14 +0000 (01:37 +0000)
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.

source/include/proto.h
source/param/loadparm.c
source/smbd/filename.c

index 7430affd3464fb6dfab30d092717a1c142ebeda4..a7581ced79ab6837e194911289531ad491bff56d 100644 (file)
@@ -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);
index 8e759cbbb0a952f1771331173783f62b79bbb920..fe3cf2f06af8685bcc13757222157d8ed5c71d42 100644 (file)
@@ -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)
index ee9ce3f8350e7dfa07440a65d1d4efba942f5ed4..a88829de9d6b3e797895edfd6d3a6d11fc135b10 100644 (file)
@@ -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++;