s3/vfs: rename SMB_VFS_STRICT_LOCK to SMB_VFS_STRICT_LOCK_CHECK
[samba.git] / source3 / include / vfs.h
index 4b3ac0372ad324fd077211f637c7353c7baff226..d71d7cc448367cba453ad78ec058a46842189a7e 100644 (file)
                const struct smb_filename * */
 /* Version 35 - Change chown from const char *, to
                const struct smb_filename * */
-
-#define SMB_VFS_INTERFACE_VERSION 35
+/* Version 35 - Change lchown from const char *, to
+               const struct smb_filename * */
+/* Version 35 - Change streaminfo from const char *, to
+               const struct smb_filename * */
+/* Version 35 - Add uint32_t flags to struct smb_filename */
+/* Version 35 - Add get/set/fget/fset dos attribute functions. */
+/* Version 35 - Add bool use_ofd_locks to struct files_struct */
+/* Bump to version 36 - Samba 4.6 will ship with that */
+/* Version 36 - Remove is_offline and set_offline */
+/* Version 37 - Module init functions now take a TALLOC_CTX * parameter. */
+/* Version 37 - Add vfs_copy_chunk_flags for DUP_EXTENTS_TO_FILE */
+/* Version 37 - Change sys_acl_delete_def_file from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change sys_acl_get_file from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change sys_acl_blob_get_file from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change sys_acl_set_file from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change listxattr from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change removexattr from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change setxattr from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change getxattr from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change mknod from const char * to const struct smb_filename * */
+/* Version 37 - Change chflags from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change disk_free from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change get_quota from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change link from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change statvfs from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change readlink from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change symlink from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change chdir from const char *
+               to const struct smb_filename * */
+/* Version 37 - Change getwd from char *
+               to const struct smb_filename * */
+/* Version 37 - Change conn->cwd from char *
+               to struct smb_filename * */
+/* Version 37 - Change realpath from char *
+               to struct smb_filename * */
+/* Version 37 - Change connectpath from char *
+               to struct smb_filename * */
+/* Version 37 - Add SMB_VFS_OFFLOAD_READ_SEND/RECV */
+/* Version 37 - Rename SMB_VFS_COPY_CHUNK_SEND/RECV to
+                SMB_VFS_OFFLOAD_READ_SEND/RECV */
+/* Version 37 - Remove SMB_VFS_STRICT_UNLOCK */
+/* Version 37 - Rename SMB_VFS_STRICT_LOCK to
+                SMB_VFS_STRICT_LOCK_CHECK */
+
+#define SMB_VFS_INTERFACE_VERSION 37
 
 /*
     All intercepted VFS operations must be declared as static functions inside module source
@@ -253,6 +311,8 @@ typedef struct files_struct {
        uint32_t access_mask;           /* NTCreateX access bits (FILE_READ_DATA etc.) */
        uint32_t share_access;          /* NTCreateX share constants (FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE). */
 
+       bool kernel_share_modes_taken;
+
        bool update_write_time_triggered;
        struct tevent_timer *update_write_time_event;
        bool update_write_time_on_close;
@@ -278,7 +338,7 @@ typedef struct files_struct {
        bool is_sparse;
        bool backup_intent; /* Handle was successfully opened with backup intent
                                and opener has privilege to do so. */
-       bool aapl_copyfile_supported;
+       bool use_ofd_locks; /* Are we using open file description locks ? */
        struct smb_filename *fsp_name;
        uint32_t name_hash;             /* Jenkins hash of full pathname. */
        uint64_t mid;                   /* Mid of the operation that created us. */
@@ -372,7 +432,7 @@ typedef struct connection_struct {
        enum timestamp_set_resolution ts_res;
        char *connectpath;
        char *origpath;
-       char *cwd; /* Working directory. */
+       struct smb_filename *cwd_fname; /* Working directory. */
 
        struct vfs_handle_struct *vfs_handles;          /* for the new plugins */
 
@@ -510,9 +570,17 @@ struct smb_filename {
        char *base_name;
        char *stream_name;
        char *original_lcomp;
+       uint32_t flags;
        SMB_STRUCT_STAT st;
 };
 
+/*
+ * smb_filename flags. Define in terms of the FSP_POSIX_FLAGS_XX
+ * to keep the numeric values consistent.
+ */
+
+#define SMB_FILENAME_POSIX_PATH                FSP_POSIX_FLAGS_PATHNAMES
+
 #define VFS_FIND(__fn__) while (handle->fns->__fn__##_fn==NULL) { \
                                handle = handle->next; \
                         }
@@ -545,14 +613,21 @@ struct vfs_fn_pointers {
 
        int (*connect_fn)(struct vfs_handle_struct *handle, const char *service, const char *user);
        void (*disconnect_fn)(struct vfs_handle_struct *handle);
-       uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle, const char *path, uint64_t *bsize,
-                             uint64_t *dfree, uint64_t *dsize);
-       int (*get_quota_fn)(struct vfs_handle_struct *handle, const char *path,
-                           enum SMB_QUOTA_TYPE qtype, unid_t id,
-                           SMB_DISK_QUOTA *qt);
+       uint64_t (*disk_free_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               uint64_t *bsize,
+                               uint64_t *dfree,
+                               uint64_t *dsize);
+       int (*get_quota_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               enum SMB_QUOTA_TYPE qtype,
+                               unid_t id,
+                               SMB_DISK_QUOTA *qt);
        int (*set_quota_fn)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
        int (*get_shadow_copy_data_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, struct shadow_copy_data *shadow_copy_data, bool labels);
-       int (*statvfs_fn)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf);
+       int (*statvfs_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               struct vfs_statvfs_struct *statbuf);
        uint32_t (*fs_capabilities_fn)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
 
        /*
@@ -653,9 +728,14 @@ struct vfs_fn_pointers {
                        uid_t uid,
                        gid_t gid);
        int (*fchown_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, uid_t uid, gid_t gid);
-       int (*lchown_fn)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
-       int (*chdir_fn)(struct vfs_handle_struct *handle, const char *path);
-       char *(*getwd_fn)(struct vfs_handle_struct *handle);
+       int (*lchown_fn)(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       uid_t uid,
+                       gid_t gid);
+       int (*chdir_fn)(struct vfs_handle_struct *handle,
+                        const struct smb_filename *smb_fname);
+       struct smb_filename *(*getwd_fn)(struct vfs_handle_struct *handle,
+                               TALLOC_CTX *mem_ctx);
        int (*ntimes_fn)(struct vfs_handle_struct *handle,
                         const struct smb_filename *smb_fname,
                         struct smb_file_time *ft);
@@ -670,25 +750,52 @@ struct vfs_fn_pointers {
                               uint32_t share_mode, uint32_t access_mask);
        int (*linux_setlease_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, int leasetype);
        bool (*getlock_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, off_t *poffset, off_t *pcount, int *ptype, pid_t *ppid);
-       int (*symlink_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
-       int (*readlink_fn)(struct vfs_handle_struct *handle, const char *path, char *buf, size_t bufsiz);
-       int (*link_fn)(struct vfs_handle_struct *handle, const char *oldpath, const char *newpath);
-       int (*mknod_fn)(struct vfs_handle_struct *handle, const char *path, mode_t mode, SMB_DEV_T dev);
-       char *(*realpath_fn)(struct vfs_handle_struct *handle, const char *path);
-       int (*chflags_fn)(struct vfs_handle_struct *handle, const char *path, unsigned int flags);
+       int (*symlink_fn)(struct vfs_handle_struct *handle,
+                               const char *link_contents,
+                               const struct smb_filename *new_smb_fname);
+       int (*readlink_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               char *buf,
+                               size_t bufsiz);
+       int (*link_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *old_smb_fname,
+                               const struct smb_filename *new_smb_fname);
+       int (*mknod_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               mode_t mode,
+                               SMB_DEV_T dev);
+       struct smb_filename *(*realpath_fn)(struct vfs_handle_struct *handle,
+                               TALLOC_CTX *ctx,
+                               const struct smb_filename *smb_fname);
+       int (*chflags_fn)(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               unsigned int flags);
        struct file_id (*file_id_create_fn)(struct vfs_handle_struct *handle,
                                            const SMB_STRUCT_STAT *sbuf);
-       struct tevent_req *(*copy_chunk_send_fn)(struct vfs_handle_struct *handle,
-                                                TALLOC_CTX *mem_ctx,
-                                                struct tevent_context *ev,
-                                                struct files_struct *src_fsp,
-                                                off_t src_off,
-                                                struct files_struct *dest_fsp,
-                                                off_t dest_off,
-                                                off_t num);
-       NTSTATUS (*copy_chunk_recv_fn)(struct vfs_handle_struct *handle,
-                                      struct tevent_req *req,
-                                      off_t *copied);
+       struct tevent_req *(*offload_read_send_fn)(TALLOC_CTX *mem_ctx,
+                                                  struct tevent_context *ev,
+                                                  struct vfs_handle_struct *handle,
+                                                  struct files_struct *fsp,
+                                                  uint32_t fsctl,
+                                                  uint32_t ttl,
+                                                  off_t offset,
+                                                  size_t to_copy);
+       NTSTATUS (*offload_read_recv_fn)(struct tevent_req *req,
+                                        struct vfs_handle_struct *handle,
+                                        TALLOC_CTX *mem_ctx,
+                                        DATA_BLOB *token_blob);
+       struct tevent_req *(*offload_write_send_fn)(struct vfs_handle_struct *handle,
+                                                   TALLOC_CTX *mem_ctx,
+                                                   struct tevent_context *ev,
+                                                   uint32_t fsctl,
+                                                   DATA_BLOB *token,
+                                                   off_t transfer_offset,
+                                                   struct files_struct *dest_fsp,
+                                                   off_t dest_off,
+                                                   off_t to_copy);
+       NTSTATUS (*offload_write_recv_fn)(struct vfs_handle_struct *handle,
+                                         struct tevent_req *req,
+                                         off_t *copied);
        NTSTATUS (*get_compression_fn)(struct vfs_handle_struct *handle,
                                       TALLOC_CTX *mem_ctx,
                                       struct files_struct *fsp,
@@ -716,7 +823,7 @@ struct vfs_fn_pointers {
 
        NTSTATUS (*streaminfo_fn)(struct vfs_handle_struct *handle,
                                  struct files_struct *fsp,
-                                 const char *fname,
+                                 const struct smb_filename *smb_fname,
                                  TALLOC_CTX *mem_ctx,
                                  unsigned int *num_streams,
                                  struct stream_struct **streams);
@@ -728,7 +835,7 @@ struct vfs_fn_pointers {
                                    char **found_name);
 
        const char *(*connectpath_fn)(struct vfs_handle_struct *handle,
-                                     const char *filename);
+                                     const struct smb_filename *smb_fname);
 
        NTSTATUS (*brl_lock_windows_fn)(struct vfs_handle_struct *handle,
                                        struct byte_range_lock *br_lck,
@@ -744,13 +851,9 @@ struct vfs_fn_pointers {
                                      struct byte_range_lock *br_lck,
                                      struct lock_struct *plock);
 
-       bool (*strict_lock_fn)(struct vfs_handle_struct *handle,
-                              struct files_struct *fsp,
-                              struct lock_struct *plock);
-
-       void (*strict_unlock_fn)(struct vfs_handle_struct *handle,
-                                struct files_struct *fsp,
-                                struct lock_struct *plock);
+       bool (*strict_lock_check_fn)(struct vfs_handle_struct *handle,
+                                    struct files_struct *fsp,
+                                    struct lock_struct *plock);
 
        NTSTATUS (*translate_name_fn)(struct vfs_handle_struct *handle,
                                      const char *name,
@@ -769,6 +872,22 @@ struct vfs_fn_pointers {
                             uint32_t max_out_len,
                             uint32_t *out_len); 
 
+       NTSTATUS (*get_dos_attributes_fn)(struct vfs_handle_struct *handle,
+                                         struct smb_filename *smb_fname,
+                                         uint32_t *dosmode);
+
+       NTSTATUS (*fget_dos_attributes_fn)(struct vfs_handle_struct *handle,
+                                          struct files_struct *fsp,
+                                          uint32_t *dosmode);
+
+       NTSTATUS (*set_dos_attributes_fn)(struct vfs_handle_struct *handle,
+                                         const struct smb_filename *smb_fname,
+                                         uint32_t dosmode);
+
+       NTSTATUS (*fset_dos_attributes_fn)(struct vfs_handle_struct *hande,
+                                          struct files_struct *fsp,
+                                          uint32_t dosmode);
+
        /* NT ACL operations. */
 
        NTSTATUS (*fget_nt_acl_fn)(struct vfs_handle_struct *handle,
@@ -800,44 +919,55 @@ struct vfs_fn_pointers {
        int (*fchmod_acl_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, mode_t mode);
 
        SMB_ACL_T (*sys_acl_get_file_fn)(struct vfs_handle_struct *handle,
-                                        const char *path_p,
+                                        const struct smb_filename *smb_fname,
                                         SMB_ACL_TYPE_T type,
                                         TALLOC_CTX *mem_ctx);
        SMB_ACL_T (*sys_acl_get_fd_fn)(struct vfs_handle_struct *handle,
                                       struct files_struct *fsp,
                                       TALLOC_CTX *mem_ctx);
        int (*sys_acl_blob_get_file_fn)(struct vfs_handle_struct *handle,
-                                       const char *path_p,
+                                       const struct smb_filename *smb_fname,
                                        TALLOC_CTX *mem_ctx,
                                        char **blob_description,
                                        DATA_BLOB *blob);
        int (*sys_acl_blob_get_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp,
                                      TALLOC_CTX *mem_ctx, char **blob_description,
                                      DATA_BLOB *blob);
-       int (*sys_acl_set_file_fn)(struct vfs_handle_struct *handle, const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
+       int (*sys_acl_set_file_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname,
+                                       SMB_ACL_TYPE_T acltype,
+                                       SMB_ACL_T theacl);
        int (*sys_acl_set_fd_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_ACL_T theacl);
-       int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle, const char *path);
+       int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname);
 
        /* EA operations. */
-       ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,const char *path, const char *name, void *value, size_t size);
+       ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname,
+                                       const char *name,
+                                       void *value,
+                                       size_t size);
        ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size);
-       ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
+       ssize_t (*listxattr_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname,
+                                       char *list,
+                                       size_t size);
        ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
-       int (*removexattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name);
+       int (*removexattr_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname,
+                                       const char *name);
        int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name);
-       int (*setxattr_fn)(struct vfs_handle_struct *handle, const char *path, const char *name, const void *value, size_t size, int flags);
+       int (*setxattr_fn)(struct vfs_handle_struct *handle,
+                                       const struct smb_filename *smb_fname,
+                                       const char *name,
+                                       const void *value,
+                                       size_t size,
+                                       int flags);
        int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags);
 
        /* aio operations */
        bool (*aio_force_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp);
 
-       /* offline operations */
-       bool (*is_offline_fn)(struct vfs_handle_struct *handle,
-                          const struct smb_filename *fname,
-                          SMB_STRUCT_STAT *sbuf);
-       int (*set_offline_fn)(struct vfs_handle_struct *handle,
-                          const struct smb_filename *fname);
-
        /* durable handle operations */
        NTSTATUS (*durable_cookie_fn)(struct vfs_handle_struct *handle,
                                      struct files_struct *fsp,
@@ -965,11 +1095,15 @@ int smb_vfs_call_connect(struct vfs_handle_struct *handle,
                         const char *service, const char *user);
 void smb_vfs_call_disconnect(struct vfs_handle_struct *handle);
 uint64_t smb_vfs_call_disk_free(struct vfs_handle_struct *handle,
-                               const char *path, uint64_t *bsize,
-                               uint64_t *dfree, uint64_t *dsize);
-int smb_vfs_call_get_quota(struct vfs_handle_struct *handle, const char *path,
-                          enum SMB_QUOTA_TYPE qtype, unid_t id,
-                          SMB_DISK_QUOTA *qt);
+                               const struct smb_filename *smb_filename,
+                               uint64_t *bsize,
+                               uint64_t *dfree,
+                               uint64_t *dsize);
+int smb_vfs_call_get_quota(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_filename,
+                               enum SMB_QUOTA_TYPE qtype,
+                               unid_t id,
+                               SMB_DISK_QUOTA *qt);
 int smb_vfs_call_set_quota(struct vfs_handle_struct *handle,
                           enum SMB_QUOTA_TYPE qtype, unid_t id,
                           SMB_DISK_QUOTA *qt);
@@ -977,8 +1111,9 @@ int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
                                      struct files_struct *fsp,
                                      struct shadow_copy_data *shadow_copy_data,
                                      bool labels);
-int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, const char *path,
-                        struct vfs_statvfs_struct *statbuf);
+int smb_vfs_call_statvfs(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       struct vfs_statvfs_struct *statbuf);
 uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
                                      enum timestamp_set_resolution *p_ts_res);
 /*
@@ -1106,10 +1241,14 @@ int smb_vfs_call_chown(struct vfs_handle_struct *handle,
                        gid_t gid);
 int smb_vfs_call_fchown(struct vfs_handle_struct *handle,
                        struct files_struct *fsp, uid_t uid, gid_t gid);
-int smb_vfs_call_lchown(struct vfs_handle_struct *handle, const char *path,
-                       uid_t uid, gid_t gid);
-int smb_vfs_call_chdir(struct vfs_handle_struct *handle, const char *path);
-char *smb_vfs_call_getwd(struct vfs_handle_struct *handle);
+int smb_vfs_call_lchown(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       uid_t uid,
+                       gid_t gid);
+int smb_vfs_call_chdir(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname);
+struct smb_filename *smb_vfs_call_getwd(struct vfs_handle_struct *handle,
+                               TALLOC_CTX *ctx);
 int smb_vfs_call_ntimes(struct vfs_handle_struct *handle,
                        const struct smb_filename *smb_fname,
                        struct smb_file_time *ft);
@@ -1131,22 +1270,31 @@ int smb_vfs_call_linux_setlease(struct vfs_handle_struct *handle,
 bool smb_vfs_call_getlock(struct vfs_handle_struct *handle,
                          struct files_struct *fsp, off_t *poffset,
                          off_t *pcount, int *ptype, pid_t *ppid);
-int smb_vfs_call_symlink(struct vfs_handle_struct *handle, const char *oldpath,
-                        const char *newpath);
+int smb_vfs_call_symlink(struct vfs_handle_struct *handle,
+                       const char *link_contents,
+                       const struct smb_filename *new_smb_fname);
 int smb_vfs_call_readlink(struct vfs_handle_struct *handle,
-                         const char *path, char *buf, size_t bufsiz);
-int smb_vfs_call_link(struct vfs_handle_struct *handle, const char *oldpath,
-                     const char *newpath);
-int smb_vfs_call_mknod(struct vfs_handle_struct *handle, const char *path,
-                      mode_t mode, SMB_DEV_T dev);
-char *smb_vfs_call_realpath(struct vfs_handle_struct *handle, const char *path);
-int smb_vfs_call_chflags(struct vfs_handle_struct *handle, const char *path,
-                        unsigned int flags);
+                       const struct smb_filename *smb_fname,
+                       char *buf,
+                       size_t bufsiz);
+int smb_vfs_call_link(struct vfs_handle_struct *handle,
+                       const struct smb_filename *old_smb_fname,
+                       const struct smb_filename *new_smb_fname);
+int smb_vfs_call_mknod(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       mode_t mode,
+                       SMB_DEV_T dev);
+struct smb_filename *smb_vfs_call_realpath(struct vfs_handle_struct *handle,
+                       TALLOC_CTX *ctx,
+                       const struct smb_filename *smb_fname);
+int smb_vfs_call_chflags(struct vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       unsigned int flags);
 struct file_id smb_vfs_call_file_id_create(struct vfs_handle_struct *handle,
                                           const SMB_STRUCT_STAT *sbuf);
 NTSTATUS smb_vfs_call_streaminfo(struct vfs_handle_struct *handle,
                                 struct files_struct *fsp,
-                                const char *fname,
+                                const struct smb_filename *smb_fname,
                                 TALLOC_CTX *mem_ctx,
                                 unsigned int *num_streams,
                                 struct stream_struct **streams);
@@ -1154,7 +1302,7 @@ int smb_vfs_call_get_real_filename(struct vfs_handle_struct *handle,
                                   const char *path, const char *name,
                                   TALLOC_CTX *mem_ctx, char **found_name);
 const char *smb_vfs_call_connectpath(struct vfs_handle_struct *handle,
-                                    const char *filename);
+                                    const struct smb_filename *smb_fname);
 NTSTATUS smb_vfs_call_brl_lock_windows(struct vfs_handle_struct *handle,
                                       struct byte_range_lock *br_lck,
                                       struct lock_struct *plock,
@@ -1166,12 +1314,9 @@ bool smb_vfs_call_brl_unlock_windows(struct vfs_handle_struct *handle,
 bool smb_vfs_call_brl_cancel_windows(struct vfs_handle_struct *handle,
                                     struct byte_range_lock *br_lck,
                                     struct lock_struct *plock);
-bool smb_vfs_call_strict_lock(struct vfs_handle_struct *handle,
-                             struct files_struct *fsp,
-                             struct lock_struct *plock);
-void smb_vfs_call_strict_unlock(struct vfs_handle_struct *handle,
-                               struct files_struct *fsp,
-                               struct lock_struct *plock);
+bool smb_vfs_call_strict_lock_check(struct vfs_handle_struct *handle,
+                                   struct files_struct *fsp,
+                                   struct lock_struct *plock);
 NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle,
                                     const char *name,
                                     enum vfs_translate_direction direction,
@@ -1187,17 +1332,43 @@ NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
                            uint8_t **_out_data,
                            uint32_t max_out_len,
                            uint32_t *out_len);
-struct tevent_req *smb_vfs_call_copy_chunk_send(struct vfs_handle_struct *handle,
-                                               TALLOC_CTX *mem_ctx,
-                                               struct tevent_context *ev,
-                                               struct files_struct *src_fsp,
-                                               off_t src_off,
-                                               struct files_struct *dest_fsp,
-                                               off_t dest_off,
-                                               off_t num);
-NTSTATUS smb_vfs_call_copy_chunk_recv(struct vfs_handle_struct *handle,
-                                     struct tevent_req *req,
-                                     off_t *copied);
+NTSTATUS smb_vfs_call_get_dos_attributes(struct vfs_handle_struct *handle,
+                                        struct smb_filename *smb_fname,
+                                        uint32_t *dosmode);
+NTSTATUS smb_vfs_call_fget_dos_attributes(struct vfs_handle_struct *handle,
+                                         struct files_struct *fsp,
+                                         uint32_t *dosmode);
+NTSTATUS smb_vfs_call_set_dos_attributes(struct vfs_handle_struct *handle,
+                                        const struct smb_filename *smb_fname,
+                                        uint32_t dosmode);
+NTSTATUS smb_vfs_call_fset_dos_attributes(struct vfs_handle_struct *handle,
+                                         struct files_struct *fsp,
+                                         uint32_t dosmode);
+struct tevent_req *smb_vfs_call_offload_read_send(
+       TALLOC_CTX *mem_ctx,
+       struct tevent_context *ev,
+       struct vfs_handle_struct *handle,
+       struct files_struct *fsp,
+       uint32_t fsctl,
+       uint32_t ttl,
+       off_t offset,
+       size_t to_copy);
+NTSTATUS smb_vfs_call_offload_read_recv(struct tevent_req *req,
+                                       struct vfs_handle_struct *handle,
+                                       TALLOC_CTX *mem_ctx,
+                                       DATA_BLOB *token_blob);
+struct tevent_req *smb_vfs_call_offload_write_send(struct vfs_handle_struct *handle,
+                                                  TALLOC_CTX *mem_ctx,
+                                                  struct tevent_context *ev,
+                                                  uint32_t fsctl,
+                                                  DATA_BLOB *token,
+                                                  off_t transfer_offset,
+                                                  struct files_struct *dest_fsp,
+                                                  off_t dest_off,
+                                                  off_t num);
+NTSTATUS smb_vfs_call_offload_write_recv(struct vfs_handle_struct *handle,
+                                        struct tevent_req *req,
+                                        off_t *copied);
 NTSTATUS smb_vfs_call_get_compression(struct vfs_handle_struct *handle,
                                      TALLOC_CTX *mem_ctx,
                                      struct files_struct *fsp,
@@ -1247,14 +1418,14 @@ int smb_vfs_call_chmod_acl(struct vfs_handle_struct *handle,
 int smb_vfs_call_fchmod_acl(struct vfs_handle_struct *handle,
                            struct files_struct *fsp, mode_t mode);
 SMB_ACL_T smb_vfs_call_sys_acl_get_file(struct vfs_handle_struct *handle,
-                                       const char *path_p,
+                                       const struct smb_filename *smb_fname,
                                        SMB_ACL_TYPE_T type,
                                        TALLOC_CTX *mem_ctx);
 SMB_ACL_T smb_vfs_call_sys_acl_get_fd(struct vfs_handle_struct *handle,
                                      struct files_struct *fsp,
                                      TALLOC_CTX *mem_ctx);
 int smb_vfs_call_sys_acl_blob_get_file(struct vfs_handle_struct *handle,
-                                      const char *path_p,
+                                      const struct smb_filename *smb_fname,
                                       TALLOC_CTX *mem_ctx,
                                       char **blob_description,
                                       DATA_BLOB *blob);
@@ -1264,32 +1435,39 @@ int smb_vfs_call_sys_acl_blob_get_fd(struct vfs_handle_struct *handle,
                                     char **blob_description,
                                     DATA_BLOB *blob);
 int smb_vfs_call_sys_acl_set_file(struct vfs_handle_struct *handle,
-                                 const char *name, SMB_ACL_TYPE_T acltype,
-                                 SMB_ACL_T theacl);
+                               const struct smb_filename *smb_fname,
+                               SMB_ACL_TYPE_T acltype,
+                               SMB_ACL_T theacl);
 int smb_vfs_call_sys_acl_set_fd(struct vfs_handle_struct *handle,
                                struct files_struct *fsp, SMB_ACL_T theacl);
 int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
-                                        const char *path);
+                               const struct smb_filename *smb_fname);
 ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
-                             const char *path, const char *name, void *value,
-                             size_t size);
+                               const struct smb_filename *smb_fname,
+                               const char *name,
+                               void *value,
+                               size_t size);
 ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle,
                               struct files_struct *fsp, const char *name,
                               void *value, size_t size);
 ssize_t smb_vfs_call_listxattr(struct vfs_handle_struct *handle,
-                              const char *path, char *list, size_t size);
-ssize_t smb_vfs_call_llistxattr(struct vfs_handle_struct *handle,
-                               const char *path, char *list, size_t size);
+                               const struct smb_filename *smb_fname,
+                               char *list,
+                               size_t size);
 ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle,
                                struct files_struct *fsp, char *list,
                                size_t size);
 int smb_vfs_call_removexattr(struct vfs_handle_struct *handle,
-                            const char *path, const char *name);
+                               const struct smb_filename *smb_fname,
+                               const char *name);
 int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle,
                              struct files_struct *fsp, const char *name);
-int smb_vfs_call_setxattr(struct vfs_handle_struct *handle, const char *path,
-                         const char *name, const void *value, size_t size,
-                         int flags);
+int smb_vfs_call_setxattr(struct vfs_handle_struct *handle,
+                               const struct smb_filename *smb_fname,
+                               const char *name,
+                               const void *value,
+                               size_t size,
+                               int flags);
 int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path,
                           const char *name, const void *value, size_t size,
                           int flags);
@@ -1334,4 +1512,7 @@ void vfs_remove_all_fsp_extensions(struct files_struct *fsp);
 void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
 void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
 
+void smb_vfs_assert_all_fns(const struct vfs_fn_pointers* fns,
+                           const char *module);
+
 #endif /* _VFS_H */