diff options
author | Michael Adam <obnox@samba.org> | 2012-09-04 18:04:11 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2012-09-08 03:39:06 +0200 |
commit | 35260ae89e2970712e2a141cd034b513076fc1ed (patch) | |
tree | d3ef6b0c06997760541c41ccdeb1ae1520e51548 /source3/include | |
parent | eb1a05f783721247e9e01f4039f36c3d69b2dca7 (diff) | |
download | samba-35260ae89e2970712e2a141cd034b513076fc1ed.tar.gz samba-35260ae89e2970712e2a141cd034b513076fc1ed.tar.bz2 samba-35260ae89e2970712e2a141cd034b513076fc1ed.zip |
s3:vfs: add durable VFS operations
This allows a VFS module to implement durable handles in different ways.
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source3/include')
-rw-r--r-- | source3/include/vfs.h | 35 | ||||
-rw-r--r-- | source3/include/vfs_macros.h | 25 |
2 files changed, 60 insertions, 0 deletions
diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 45895e7d84..3e4eefef77 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -142,6 +142,7 @@ /* Leave at 29 - not yet released. move to plain off_t - abartlet */ /* Leave at 29 - not yet released. Remove sys_acl functions other than set and get - abartlet */ /* Leave at 29 - not yet released. Added backup_intent bool to files_struct - JRA */ +/* Leave at 29 - not yet released. Add durable handle functions - metze/obnox */ #define SMB_VFS_INTERFACE_VERSION 29 /* @@ -712,6 +713,24 @@ struct vfs_fn_pointers { 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, + TALLOC_CTX *mem_ctx, + DATA_BLOB *cookie); + NTSTATUS (*durable_disconnect_fn)(struct vfs_handle_struct *handle, + struct files_struct *fsp, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + DATA_BLOB *new_cookie); + NTSTATUS (*durable_reconnect_fn)(struct vfs_handle_struct *handle, + struct smb_request *smb1req, + struct smbXsrv_open *op, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + struct files_struct **fsp, + DATA_BLOB *new_cookie); }; /* @@ -1108,6 +1127,22 @@ bool smb_vfs_call_is_offline(struct vfs_handle_struct *handle, SMB_STRUCT_STAT *sbuf); int smb_vfs_call_set_offline(struct vfs_handle_struct *handle, const struct smb_filename *fname); +NTSTATUS smb_vfs_call_durable_cookie(struct vfs_handle_struct *handle, + struct files_struct *fsp, + TALLOC_CTX *mem_ctx, + DATA_BLOB *cookie); +NTSTATUS smb_vfs_call_durable_disconnect(struct vfs_handle_struct *handle, + struct files_struct *fsp, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + DATA_BLOB *new_cookie); +NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle, + struct smb_request *smb1req, + struct smbXsrv_open *op, + const DATA_BLOB old_cookie, + TALLOC_CTX *mem_ctx, + struct files_struct **fsp, + DATA_BLOB *new_cookie); NTSTATUS smb_register_vfs(int version, const char *name, const struct vfs_fn_pointers *fns); diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h index e577e9950f..f077a6f1af 100644 --- a/source3/include/vfs_macros.h +++ b/source3/include/vfs_macros.h @@ -509,4 +509,29 @@ #define SMB_VFS_NEXT_SET_OFFLINE(handle,fname) \ smb_vfs_call_set_offline((handle)->next, (fname)) +/* durable handle operations */ + +#define SMB_VFS_DURABLE_COOKIE(fsp, mem_ctx, cookie) \ + smb_vfs_call_durable_cookie((fsp)->conn->vfs_handles, \ + (fsp), (mem_ctx), (cookie)) +#define SMB_VFS_NEXT_DURABLE_COOKIE(handle, fsp, mem_ctx, cookie) \ + smb_vfs_call_durable_cookie(((handle)->next, \ + (fsp), (mem_ctx), (cookie)) + +#define SMB_VFS_DURABLE_DISCONNECT(fsp, old_cookie, mem_ctx, new_cookie) \ + smb_vfs_call_durable_disconnect((fsp)->conn->vfs_handles, \ + (fsp), (old_cookie), (mem_ctx), (new_cookie)) +#define SMB_VFS_NEXT_DURABLE_DISCONNECT(handle, fsp, old_cookie, mem_ctx, new_cookie) \ + smb_vfs_call_durable_disconnect((handle)->next, \ + (fsp), (old_cookie), (mem_ctx), (new_cookie)) + +#define SMB_VFS_DURABLE_RECONNECT(conn, smb1req, op, old_cookie, mem_ctx, fsp, new_cookie) \ + smb_vfs_call_durable_reconnect((conn)->vfs_handles, \ + (smb1req), (op), (old_cookie), \ + (mem_ctx), (fsp), (new_cookie)) +#define SMB_VFS_NEXT_DURABLE_RECONNECT(handle, smb1req, op, old_cookie, mem_ctx, fsp, new_cookie) \ + smb_vfs_call_durable_reconnect((handle)->next, \ + (smb1req), (op), (old_cookie), \ + (mem_ctx), (fsp), (new_cookie)) + #endif /* _VFS_MACROS_H */ |