summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorSteven Danneman <steven.danneman@isilon.com>2009-02-02 21:37:51 -0800
committerSteven Danneman <steven.danneman@isilon.com>2009-02-09 23:56:17 -0800
commit6272f4c2f453c509b8a3893d4c2ac5fc356b348d (patch)
tree82dce05824a6106a371febc4ec9ca6b2864cbcde /source3/modules
parent25d345eb39c69b2b42a966846ae893b068de40a4 (diff)
downloadsamba-6272f4c2f453c509b8a3893d4c2ac5fc356b348d.tar.gz
samba-6272f4c2f453c509b8a3893d4c2ac5fc356b348d.tar.bz2
samba-6272f4c2f453c509b8a3893d4c2ac5fc356b348d.zip
s3: Added SMB_VFS_INIT_SEARCH_OP to initialize data at the beginning of SMB search requests.
By default this VFS call is a NOOP, but the onefs vfs module takes advantage of it to initialize direntry search caches at the beginning of each TRANS2_FIND_FIRST, TRANS2_FIND_NEXT, SMBffirst, SMBsearch, and SMBunique
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/vfs_default.c9
-rw-r--r--source3/modules/vfs_full_audit.c14
2 files changed, 23 insertions, 0 deletions
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 7d61191a69..cb56690dbb 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -206,6 +206,13 @@ static int vfswrap_closedir(vfs_handle_struct *handle, SMB_STRUCT_DIR *dirp)
return result;
}
+static void vfswrap_init_search_op(vfs_handle_struct *handle,
+ SMB_STRUCT_DIR *dirp)
+{
+ /* Default behavior is a NOOP */
+ return;
+}
+
/* File operations */
static int vfswrap_open(vfs_handle_struct *handle, const char *fname,
@@ -1449,6 +1456,8 @@ static vfs_op_tuple vfs_default_ops[] = {
SMB_VFS_LAYER_OPAQUE},
{SMB_VFS_OP(vfswrap_closedir), SMB_VFS_OP_CLOSEDIR,
SMB_VFS_LAYER_OPAQUE},
+ {SMB_VFS_OP(vfswrap_init_search_op), SMB_VFS_OP_INIT_SEARCH_OP,
+ SMB_VFS_LAYER_OPAQUE},
/* File operations */
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index e279772494..e7ca77f6fa 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -108,6 +108,8 @@ static int smb_full_audit_rmdir(vfs_handle_struct *handle,
const char *path);
static int smb_full_audit_closedir(vfs_handle_struct *handle,
SMB_STRUCT_DIR *dirp);
+static void smb_full_audit_init_search_op(vfs_handle_struct *handle,
+ SMB_STRUCT_DIR *dirp);
static int smb_full_audit_open(vfs_handle_struct *handle,
const char *fname, files_struct *fsp, int flags, mode_t mode);
static NTSTATUS smb_full_audit_create_file(vfs_handle_struct *handle,
@@ -373,6 +375,8 @@ static vfs_op_tuple audit_op_tuples[] = {
SMB_VFS_LAYER_LOGGER},
{SMB_VFS_OP(smb_full_audit_closedir), SMB_VFS_OP_CLOSEDIR,
SMB_VFS_LAYER_LOGGER},
+ {SMB_VFS_OP(smb_full_audit_init_search_op), SMB_VFS_OP_INIT_SEARCH_OP,
+ SMB_VFS_LAYER_LOGGER},
/* File operations */
@@ -587,6 +591,7 @@ static struct {
{ SMB_VFS_OP_MKDIR, "mkdir" },
{ SMB_VFS_OP_RMDIR, "rmdir" },
{ SMB_VFS_OP_CLOSEDIR, "closedir" },
+ { SMB_VFS_OP_INIT_SEARCH_OP, "init_search_op" },
{ SMB_VFS_OP_OPEN, "open" },
{ SMB_VFS_OP_CREATE_FILE, "create_file" },
{ SMB_VFS_OP_CLOSE, "close" },
@@ -1110,6 +1115,15 @@ static int smb_full_audit_closedir(vfs_handle_struct *handle,
return result;
}
+static void smb_full_audit_init_search_op(vfs_handle_struct *handle,
+ SMB_STRUCT_DIR *dirp)
+{
+ SMB_VFS_NEXT_INIT_SEARCH_OP(handle, dirp);
+
+ do_log(SMB_VFS_OP_INIT_SEARCH_OP, True, handle, "");
+ return;
+}
+
static int smb_full_audit_open(vfs_handle_struct *handle,
const char *fname, files_struct *fsp, int flags, mode_t mode)
{