summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2010-12-17 23:08:01 -0800
committerJeremy Allison <jra@samba.org>2010-12-18 08:59:27 +0100
commit716ea734e4cd83a2030ca2cac10056bdaab1a021 (patch)
tree8caf80f6c76f5de768896e6d0aebaf3fadbc3116 /source3/modules
parent7157221da5bc6787b08ab26c9e83c08208b41d8a (diff)
downloadsamba-716ea734e4cd83a2030ca2cac10056bdaab1a021.tar.gz
samba-716ea734e4cd83a2030ca2cac10056bdaab1a021.tar.bz2
samba-716ea734e4cd83a2030ca2cac10056bdaab1a021.zip
Rename vfs operation posix_fallocate to just fallocate and add the vfs_fallocate_mode parameter.
It turns out we need the fallocate operations to be able to both allocate and extend filesize, and to allocate and not extend filesize, and posix_fallocate can only do the former. So by defining the vfs op as posix_fallocate we lose the opportunity to use any underlying syscalls (like Linux fallocate) that can do the latter as well. We don't currently use the non-extending filesize call, but now I've changed the vfs op definition we can in the future. For the moment simply map the fallocate op onto posix_fallocate for the VFS_FALLOCATE_EXTEND_SIZE case and return ENOSYS for the VFS_FALLOCATE_KEEP_SIZE case. Jeremy. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Sat Dec 18 08:59:27 CET 2010 on sn-devel-104
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/vfs_default.c26
-rw-r--r--source3/modules/vfs_full_audit.c13
-rw-r--r--source3/modules/vfs_streams_xattr.c9
-rw-r--r--source3/modules/vfs_time_audit.c9
4 files changed, 34 insertions, 23 deletions
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 66dd5a912d..e08d48ff5f 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -848,12 +848,13 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
space_to_write = len - pst->st_ex_size;
- /* for allocation try posix_fallocate first. This can fail on some
+ /* for allocation try fallocate first. This can fail on some
platforms e.g. when the filesystem doesn't support it and no
emulation is being done by the libc (like on AIX with JFS1). In that
- case we do our own emulation. posix_fallocate implementations can
+ case we do our own emulation. fallocate implementations can
return ENOTSUP or EINVAL in cases like that. */
- ret = SMB_VFS_POSIX_FALLOCATE(fsp, pst->st_ex_size, space_to_write);
+ ret = SMB_VFS_FALLOCATE(fsp, VFS_FALLOCATE_EXTEND_SIZE,
+ pst->st_ex_size, space_to_write);
if (ret == ENOSPC) {
errno = ENOSPC;
return -1;
@@ -861,7 +862,7 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
if (ret == 0) {
return 0;
}
- DEBUG(10,("strict_allocate_ftruncate: SMB_VFS_POSIX_FALLOCATE failed with "
+ DEBUG(10,("strict_allocate_ftruncate: SMB_VFS_FALLOCATE failed with "
"error %d. Falling back to slow manual allocation\n", ret));
/* available disk space is enough or not? */
@@ -953,16 +954,23 @@ static int vfswrap_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_O
return result;
}
-static int vfswrap_posix_fallocate(vfs_handle_struct *handle,
+static int vfswrap_fallocate(vfs_handle_struct *handle,
files_struct *fsp,
+ enum vfs_fallocate_mode mode,
SMB_OFF_T offset,
SMB_OFF_T len)
{
int result;
- START_PROFILE(syscall_posix_fallocate);
- result = sys_posix_fallocate(fsp->fh->fd, offset, len);
- END_PROFILE(syscall_posix_fallocate);
+ START_PROFILE(syscall_fallocate);
+ if (mode == VFS_FALLOCATE_EXTEND_SIZE) {
+ result = sys_posix_fallocate(fsp->fh->fd, offset, len);
+ } else {
+ /* TODO - implement call into Linux fallocate call. */
+ errno = ENOSYS;
+ result = -1;
+ }
+ END_PROFILE(syscall_fallocate);
return result;
}
@@ -1651,7 +1659,7 @@ static struct vfs_fn_pointers vfs_default_fns = {
.getwd = vfswrap_getwd,
.ntimes = vfswrap_ntimes,
.ftruncate = vfswrap_ftruncate,
- .posix_fallocate = vfswrap_posix_fallocate,
+ .fallocate = vfswrap_fallocate,
.lock = vfswrap_lock,
.kernel_flock = vfswrap_kernel_flock,
.linux_setlease = vfswrap_linux_setlease,
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index b7c0888a22..10422fca79 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -124,7 +124,7 @@ typedef enum _vfs_op_type {
SMB_VFS_OP_GETWD,
SMB_VFS_OP_NTIMES,
SMB_VFS_OP_FTRUNCATE,
- SMB_VFS_OP_POSIX_FALLOCATE,
+ SMB_VFS_OP_FALLOCATE,
SMB_VFS_OP_LOCK,
SMB_VFS_OP_KERNEL_FLOCK,
SMB_VFS_OP_LINUX_SETLEASE,
@@ -263,7 +263,7 @@ static struct {
{ SMB_VFS_OP_GETWD, "getwd" },
{ SMB_VFS_OP_NTIMES, "ntimes" },
{ SMB_VFS_OP_FTRUNCATE, "ftruncate" },
- { SMB_VFS_OP_POSIX_FALLOCATE,"posix_fallocate" },
+ { SMB_VFS_OP_FALLOCATE,"fallocate" },
{ SMB_VFS_OP_LOCK, "lock" },
{ SMB_VFS_OP_KERNEL_FLOCK, "kernel_flock" },
{ SMB_VFS_OP_LINUX_SETLEASE, "linux_setlease" },
@@ -1224,15 +1224,16 @@ static int smb_full_audit_ftruncate(vfs_handle_struct *handle, files_struct *fsp
return result;
}
-static int smb_full_audit_posix_fallocate(vfs_handle_struct *handle, files_struct *fsp,
+static int smb_full_audit_fallocate(vfs_handle_struct *handle, files_struct *fsp,
+ enum vfs_fallocate_mode mode,
SMB_OFF_T offset,
SMB_OFF_T len)
{
int result;
- result = SMB_VFS_NEXT_POSIX_FALLOCATE(handle, fsp, offset, len);
+ result = SMB_VFS_NEXT_FALLOCATE(handle, fsp, mode, offset, len);
- do_log(SMB_VFS_OP_POSIX_FALLOCATE, (result >= 0), handle,
+ do_log(SMB_VFS_OP_FALLOCATE, (result >= 0), handle,
"%s", fsp_str_do_log(fsp));
return result;
@@ -2234,7 +2235,7 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
.getwd = smb_full_audit_getwd,
.ntimes = smb_full_audit_ntimes,
.ftruncate = smb_full_audit_ftruncate,
- .posix_fallocate = smb_full_audit_posix_fallocate,
+ .fallocate = smb_full_audit_fallocate,
.lock = smb_full_audit_lock,
.kernel_flock = smb_full_audit_kernel_flock,
.linux_setlease = smb_full_audit_linux_setlease,
diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 819f33d36e..fb83c5b789 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -1023,20 +1023,21 @@ static int streams_xattr_ftruncate(struct vfs_handle_struct *handle,
return 0;
}
-static int streams_xattr_posix_fallocate(struct vfs_handle_struct *handle,
+static int streams_xattr_fallocate(struct vfs_handle_struct *handle,
struct files_struct *fsp,
+ enum vfs_fallocate_mode mode,
SMB_OFF_T offset,
SMB_OFF_T len)
{
struct stream_io *sio =
(struct stream_io *)VFS_FETCH_FSP_EXTENSION(handle, fsp);
- DEBUG(10, ("streams_xattr_posix_fallocate called for file %s offset %.0f"
+ DEBUG(10, ("streams_xattr_fallocate called for file %s offset %.0f"
"len = %.0f\n",
fsp_str_dbg(fsp), (double)offset, (double)len));
if (sio == NULL) {
- return SMB_VFS_NEXT_POSIX_FALLOCATE(handle, fsp, offset, len);
+ return SMB_VFS_NEXT_FALLOCATE(handle, fsp, mode, offset, len);
}
if (!streams_xattr_recheck(sio)) {
@@ -1059,7 +1060,7 @@ static struct vfs_fn_pointers vfs_streams_xattr_fns = {
.unlink = streams_xattr_unlink,
.rename = streams_xattr_rename,
.ftruncate = streams_xattr_ftruncate,
- .posix_fallocate = streams_xattr_posix_fallocate,
+ .fallocate = streams_xattr_fallocate,
.streaminfo = streams_xattr_streaminfo,
};
diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c
index e9481b5d67..136807f067 100644
--- a/source3/modules/vfs_time_audit.c
+++ b/source3/modules/vfs_time_audit.c
@@ -905,8 +905,9 @@ static int smb_time_audit_ftruncate(vfs_handle_struct *handle,
return result;
}
-static int smb_time_audit_posix_fallocate(vfs_handle_struct *handle,
+static int smb_time_audit_fallocate(vfs_handle_struct *handle,
files_struct *fsp,
+ enum vfs_fallocate_mode mode,
SMB_OFF_T offset,
SMB_OFF_T len)
{
@@ -915,12 +916,12 @@ static int smb_time_audit_posix_fallocate(vfs_handle_struct *handle,
double timediff;
clock_gettime_mono(&ts1);
- result = SMB_VFS_NEXT_POSIX_FALLOCATE(handle, fsp, offset, len);
+ result = SMB_VFS_NEXT_FALLOCATE(handle, fsp, mode, offset, len);
clock_gettime_mono(&ts2);
timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
if (timediff > audit_timeout) {
- smb_time_audit_log("posix_fallocate", timediff);
+ smb_time_audit_log("fallocate", timediff);
}
return result;
@@ -2357,7 +2358,7 @@ static struct vfs_fn_pointers vfs_time_audit_fns = {
.getwd = smb_time_audit_getwd,
.ntimes = smb_time_audit_ntimes,
.ftruncate = smb_time_audit_ftruncate,
- .posix_fallocate = smb_time_audit_posix_fallocate,
+ .fallocate = smb_time_audit_fallocate,
.lock = smb_time_audit_lock,
.kernel_flock = smb_time_audit_kernel_flock,
.linux_setlease = smb_time_audit_linux_setlease,