Revert "Change strict allocate to default to true.
[samba.git] / source3 / modules / vfs_cacheprime.c
index 6eb74e66edd8a547a42407109d19f93f929cdfc3..02cffbb703d0e5035a965ed5b0269989a741b31c 100644 (file)
@@ -48,14 +48,13 @@ static void * g_readbuf = NULL;
 static bool prime_cache(
             struct vfs_handle_struct *  handle,
                        files_struct *                  fsp,
-                       int                                     fd,
                        SMB_OFF_T                           offset,
                        size_t                              count)
 {
         SMB_OFF_T * last;
         ssize_t nread;
 
-        last = VFS_ADD_FSP_EXTENSION(handle, fsp, SMB_OFF_T);
+        last = (SMB_OFF_T *)VFS_ADD_FSP_EXTENSION(handle, fsp, SMB_OFF_T, NULL);
         if (!last) {
                 return False;
         }
@@ -73,9 +72,9 @@ static bool prime_cache(
         DEBUG(module_debug,
             ("%s: doing readahead of %lld bytes at %lld for %s\n",
             MODULE, (long long)g_readsz, (long long)*last,
-            fsp->fsp_name));
+           fsp_str_dbg(fsp)));
 
-        nread = sys_pread(fd, g_readbuf, g_readsz, *last);
+        nread = sys_pread(fsp->fh->fd, g_readbuf, g_readsz, *last);
         if (nread < 0) {
             *last = -1;
             return False;
@@ -90,6 +89,8 @@ static int cprime_connect(
                 const char *                service,
                 const char *                user)
 {
+       int ret;
+
         module_debug = lp_parm_int(SNUM(handle->conn), MODULE, "debug", 100);
         if (g_readbuf) {
                 /* Only allocate g_readbuf once. If the config changes and
@@ -99,6 +100,11 @@ static int cprime_connect(
                 return SMB_VFS_NEXT_CONNECT(handle, service, user);
         }
 
+       ret = SMB_VFS_NEXT_CONNECT(handle, service, user);
+       if (ret < 0) {
+               return ret;
+       }
+
         g_readsz = conv_str_size(lp_parm_const_string(SNUM(handle->conn),
                                         MODULE, "rsize", NULL));
 
@@ -119,42 +125,40 @@ static int cprime_connect(
                 g_readsz = 0;
         }
 
-        return SMB_VFS_NEXT_CONNECT(handle, service, user);
+        return 0;
 }
 
 static ssize_t cprime_sendfile(
                 struct vfs_handle_struct *  handle,
                 int                         tofd,
-                files_struct *              fsp,
-                int                         fromfd,
+                files_struct *              fromfsp,
                 const DATA_BLOB *           header,
                 SMB_OFF_T                   offset,
                 size_t                      count)
 {
         if (g_readbuf && offset == 0) {
-                prime_cache(handle, fsp, fromfd, offset, count);
+                prime_cache(handle, fromfsp, offset, count);
         }
 
-        return SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, fromfd,
+        return SMB_VFS_NEXT_SENDFILE(handle, tofd, fromfsp,
                                      header, offset, count);
 }
 
 static ssize_t cprime_read(
                 vfs_handle_struct * handle,
                 files_struct *      fsp,
-                int                 fd,
                 void *              data,
                 size_t              count)
 {
         SMB_OFF_T offset;
 
-        offset = SMB_VFS_LSEEK(fsp, fd, 0, SEEK_CUR);
+        offset = SMB_VFS_LSEEK(fsp, 0, SEEK_CUR);
         if (offset >= 0 && g_readbuf)  {
-                prime_cache(handle, fsp, fd, offset, count);
-                SMB_VFS_LSEEK(fsp, fd, offset, SEEK_SET);
+                prime_cache(handle, fsp, offset, count);
+                SMB_VFS_LSEEK(fsp, offset, SEEK_SET);
         }
 
-        return SMB_VFS_NEXT_READ(handle, fsp, fd, data, count);
+        return SMB_VFS_NEXT_READ(handle, fsp, data, count);
 }
 
 static ssize_t cprime_pread(
@@ -165,24 +169,17 @@ static ssize_t cprime_pread(
                 SMB_OFF_T           offset)
 {
         if (g_readbuf) {
-                prime_cache(handle, fsp, fsp->fh->fd, offset, count);
+                prime_cache(handle, fsp, offset, count);
         }
 
         return SMB_VFS_NEXT_PREAD(handle, fsp, data, count, offset);
 }
 
-static vfs_op_tuple cprime_ops [] =
-{
-        {SMB_VFS_OP(cprime_sendfile),
-                SMB_VFS_OP_SENDFILE, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(cprime_pread),
-                SMB_VFS_OP_PREAD, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(cprime_read),
-                SMB_VFS_OP_READ, SMB_VFS_LAYER_TRANSPARENT},
-        {SMB_VFS_OP(cprime_connect),
-                SMB_VFS_OP_CONNECT,  SMB_VFS_LAYER_TRANSPARENT},
-
-        {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
+static struct vfs_fn_pointers vfs_cacheprime_fns = {
+        .sendfile = cprime_sendfile,
+        .pread = cprime_pread,
+        .vfs_read = cprime_read,
+        .connect_fn = cprime_connect,
 };
 
 /* -------------------------------------------------------------------------
@@ -193,7 +190,8 @@ static vfs_op_tuple cprime_ops [] =
 NTSTATUS vfs_cacheprime_init(void);
 NTSTATUS vfs_cacheprime_init(void)
 {
-    return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, MODULE, cprime_ops);
+       return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, MODULE,
+                               &vfs_cacheprime_fns);
 }
 
 /* vim: set sw=4 ts=4 tw=79 et: */