All code in Samba now uses SMB_VFS_PWRITE or SMB_VFS_PWRITE_SEND.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Sat May 5 01:38:07 CEST 2018 on sn-devel-144
return -1;
}
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp,
- const void *data, size_t n)
-{
- errno = ENOSYS;
- return -1;
-}
-
static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp,
const void *data, size_t n, off_t offset)
{
.pread_fn = skel_pread,
.pread_send_fn = skel_pread_send,
.pread_recv_fn = skel_pread_recv,
- .write_fn = skel_write,
.pwrite_fn = skel_pwrite,
.pwrite_send_fn = skel_pwrite_send,
.pwrite_recv_fn = skel_pwrite_recv,
return state->ret;
}
-static ssize_t skel_write(vfs_handle_struct *handle, files_struct *fsp,
- const void *data, size_t n)
-{
- return SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
-}
-
static ssize_t skel_pwrite(vfs_handle_struct *handle, files_struct *fsp,
const void *data, size_t n, off_t offset)
{
.pread_fn = skel_pread,
.pread_send_fn = skel_pread_send,
.pread_recv_fn = skel_pread_recv,
- .write_fn = skel_write,
.pwrite_fn = skel_pwrite,
.pwrite_send_fn = skel_pwrite_send,
.pwrite_recv_fn = skel_pwrite_recv,
Only implement async versions. */
/* Version 39 - Remove SMB_VFS_READ
All users are now pread or async versions. */
+/* Version 39 - Remove SMB_VFS_WRITE
+ All users are now pwrite or async versions. */
#define SMB_VFS_INTERFACE_VERSION 39
void *data,
size_t n, off_t offset);
ssize_t (*pread_recv_fn)(struct tevent_req *req, struct vfs_aio_state *state);
- ssize_t (*write_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n);
ssize_t (*pwrite_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const void *data, size_t n, off_t offset);
struct tevent_req *(*pwrite_send_fn)(struct vfs_handle_struct *handle,
TALLOC_CTX *mem_ctx,
size_t n, off_t offset);
ssize_t SMB_VFS_PREAD_RECV(struct tevent_req *req, struct vfs_aio_state *state);
-ssize_t smb_vfs_call_write(struct vfs_handle_struct *handle,
- struct files_struct *fsp, const void *data,
- size_t n);
ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
struct files_struct *fsp, const void *data,
size_t n, off_t offset);
smb_vfs_call_pread_send((handle)->next, (mem_ctx), (ev), (fsp), \
(data), (n), (off))
-#define SMB_VFS_WRITE(fsp, data, n) \
- smb_vfs_call_write((fsp)->conn->vfs_handles, (fsp), (data), (n))
-#define SMB_VFS_NEXT_WRITE(handle, fsp, data, n) \
- smb_vfs_call_write((handle)->next, (fsp), (data), (n))
-
#define SMB_VFS_PWRITE(fsp, data, n, off) \
smb_vfs_call_pwrite((fsp)->conn->vfs_handles, (fsp), (data), (n), (off))
#define SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, off) \
}
-static ssize_t cephwrap_write(struct vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n)
-{
- ssize_t result;
-
- DBG_DEBUG("[CEPH] write(%p, %p, %p, %llu)\n", handle, fsp, data, llu(n));
-
- result = ceph_write(handle->data, fsp->fh->fd, data, n, -1);
-
- DBG_DEBUG("[CEPH] write(...) = %llu\n", llu(result));
- if (result < 0) {
- WRAP_RETURN(result);
- }
- fsp->fh->pos += result;
- return result;
-}
-
static ssize_t cephwrap_pwrite(struct vfs_handle_struct *handle, files_struct *fsp, const void *data,
size_t n, off_t offset)
{
.open_fn = cephwrap_open,
.close_fn = cephwrap_close,
.pread_fn = cephwrap_pread,
- .write_fn = cephwrap_write,
.pwrite_fn = cephwrap_pwrite,
.lseek_fn = cephwrap_lseek,
.sendfile_fn = cephwrap_sendfile,
return fd;
}
-static ssize_t commit_write(
- vfs_handle_struct * handle,
- files_struct * fsp,
- const void * data,
- size_t count)
-{
- ssize_t ret;
- ret = SMB_VFS_NEXT_WRITE(handle, fsp, data, count);
-
- if (ret > 0) {
- if (commit(handle, fsp, fsp->fh->pos, ret) == -1) {
- return -1;
- }
- }
-
- return ret;
-}
-
static ssize_t commit_pwrite(
vfs_handle_struct * handle,
files_struct * fsp,
static struct vfs_fn_pointers vfs_commit_fns = {
.open_fn = commit_open,
.close_fn = commit_close,
- .write_fn = commit_write,
.pwrite_fn = commit_pwrite,
.pwrite_send_fn = commit_pwrite_send,
.pwrite_recv_fn = commit_pwrite_recv,
return result;
}
-static ssize_t vfswrap_write(vfs_handle_struct *handle, files_struct *fsp, const void *data, size_t n)
-{
- ssize_t result;
-
- START_PROFILE_BYTES(syscall_write, n);
- result = sys_write(fsp->fh->fd, data, n);
- END_PROFILE_BYTES(syscall_write);
- return result;
-}
-
static ssize_t vfswrap_pwrite(vfs_handle_struct *handle, files_struct *fsp, const void *data,
size_t n, off_t offset)
{
.pread_fn = vfswrap_pread,
.pread_send_fn = vfswrap_pread_send,
.pread_recv_fn = vfswrap_pread_recv,
- .write_fn = vfswrap_write,
.pwrite_fn = vfswrap_pwrite,
.pwrite_send_fn = vfswrap_pwrite_send,
.pwrite_recv_fn = vfswrap_pwrite_recv,
return state->ret;
}
-static ssize_t smb_full_audit_write(vfs_handle_struct *handle, files_struct *fsp,
- const void *data, size_t n)
-{
- ssize_t result;
-
- result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
-
- do_log(SMB_VFS_OP_WRITE, (result >= 0), handle, "%s",
- fsp_str_do_log(fsp));
-
- return result;
-}
-
static ssize_t smb_full_audit_pwrite(vfs_handle_struct *handle, files_struct *fsp,
const void *data, size_t n,
off_t offset)
.pread_fn = smb_full_audit_pread,
.pread_send_fn = smb_full_audit_pread_send,
.pread_recv_fn = smb_full_audit_pread_recv,
- .write_fn = smb_full_audit_write,
.pwrite_fn = smb_full_audit_pwrite,
.pwrite_send_fn = smb_full_audit_pwrite_send,
.pwrite_recv_fn = smb_full_audit_pwrite_recv,
return ret;
}
-static ssize_t vfs_gluster_write(struct vfs_handle_struct *handle,
- files_struct *fsp, const void *data, size_t n)
-{
- return glfs_write(*(glfs_fd_t **)VFS_FETCH_FSP_EXTENSION(handle, fsp), data, n, 0);
-}
-
static ssize_t vfs_gluster_pwrite(struct vfs_handle_struct *handle,
files_struct *fsp, const void *data,
size_t n, off_t offset)
.pread_fn = vfs_gluster_pread,
.pread_send_fn = vfs_gluster_pread_send,
.pread_recv_fn = vfs_gluster_recv,
- .write_fn = vfs_gluster_write,
.pwrite_fn = vfs_gluster_pwrite,
.pwrite_send_fn = vfs_gluster_pwrite_send,
.pwrite_recv_fn = vfs_gluster_recv,
return state->ret;
}
-static ssize_t smb_time_audit_write(vfs_handle_struct *handle,
- files_struct *fsp,
- const void *data, size_t n)
-{
- ssize_t result;
- struct timespec ts1,ts2;
- double timediff;
-
- clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_WRITE(handle, fsp, data, n);
- clock_gettime_mono(&ts2);
- timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
-
- if (timediff > audit_timeout) {
- smb_time_audit_log_fsp("write", timediff, fsp);
- }
-
- return result;
-}
-
static ssize_t smb_time_audit_pwrite(vfs_handle_struct *handle,
files_struct *fsp,
const void *data, size_t n,
.pread_fn = smb_time_audit_pread,
.pread_send_fn = smb_time_audit_pread_send,
.pread_recv_fn = smb_time_audit_pread_recv,
- .write_fn = smb_time_audit_write,
.pwrite_fn = smb_time_audit_pwrite,
.pwrite_send_fn = smb_time_audit_pwrite_send,
.pwrite_recv_fn = smb_time_audit_pwrite_recv,
return state->retval;
}
-ssize_t smb_vfs_call_write(struct vfs_handle_struct *handle,
- struct files_struct *fsp, const void *data,
- size_t n)
-{
- VFS_FIND(write);
- return handle->fns->write_fn(handle, fsp, data, n);
-}
-
ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
struct files_struct *fsp, const void *data,
size_t n, off_t offset)