Second part of the fix for bug #5790 - samba returns STATUS_OBJECT_NAME_NOT_FOUND...
authorJeremy Allison <jra@samba.org>
Sat, 27 Sep 2008 01:39:03 +0000 (18:39 -0700)
committerJeremy Allison <jra@samba.org>
Sat, 27 Sep 2008 01:39:03 +0000 (18:39 -0700)
This was my fault. I use a singleton cache (positive and negative) to speed up pathname based qfileinfo/setfileinfo lookups for alternate fsp's open on the same path. I only invalidated the negative cache on adding a new file fsp, as I incorrectly imagined the new fsp was put at the *end* of the open files list. DLIST_ADD puts it at the start, meaning any subsequent open wasn't seen once the cache was set. Doh !
Jeremy.

source3/smbd/files.c

index 777f8e1e236220ab555c7c9e5bfb43e4ae1bb4c2..8d06e20f810f541c5f63ec858c3baf3d7f186ecf 100644 (file)
@@ -122,10 +122,12 @@ NTSTATUS file_new(connection_struct *conn, files_struct **result)
 
        chain_fsp = fsp;
 
-       /* A new fsp invalidates a negative fsp_fi_cache. */
-       if (fsp_fi_cache.fsp == NULL) {
-               ZERO_STRUCT(fsp_fi_cache);
-       }
+       /* A new fsp invalidates the positive and
+         negative fsp_fi_cache as the new fsp is pushed
+         at the start of the list and we search from
+         a cache hit to the *end* of the list. */
+
+       ZERO_STRUCT(fsp_fi_cache);
 
        *result = fsp;
        return NT_STATUS_OK;