summaryrefslogtreecommitdiffstats
path: root/source3/modules/vfs_onefs.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-01-29 15:31:56 -0800
committerJeremy Allison <jra@samba.org>2009-01-29 15:31:56 -0800
commitc1332943db6630c1dd916040bdbc9f7627ade148 (patch)
treebd3881893bb50ee5962c8060c7556250db289c7f /source3/modules/vfs_onefs.c
parent164fd3cb3398b14fa02f13e5618465678b27ad07 (diff)
parentd1ab1b6482d7413337b42de83d7de1ae016d33e1 (diff)
downloadsamba-c1332943db6630c1dd916040bdbc9f7627ade148.tar.gz
samba-c1332943db6630c1dd916040bdbc9f7627ade148.tar.xz
samba-c1332943db6630c1dd916040bdbc9f7627ade148.zip
Merge branch 'master' of ssh://jra@git.samba.org/data/git/samba
Diffstat (limited to 'source3/modules/vfs_onefs.c')
-rw-r--r--source3/modules/vfs_onefs.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/source3/modules/vfs_onefs.c b/source3/modules/vfs_onefs.c
index e048e89589..e2f272aa11 100644
--- a/source3/modules/vfs_onefs.c
+++ b/source3/modules/vfs_onefs.c
@@ -40,6 +40,31 @@ static int onefs_open(vfs_handle_struct *handle, const char *fname,
return SMB_VFS_NEXT_OPEN(handle, fname, fsp, flags, mode);
}
+static uint64_t onefs_get_alloc_size(struct vfs_handle_struct *handle, files_struct *fsp,
+ const SMB_STRUCT_STAT *sbuf)
+{
+ uint64_t result;
+
+ START_PROFILE(syscall_get_alloc_size);
+
+ if(S_ISDIR(sbuf->st_mode)) {
+ result = 0;
+ goto out;
+ }
+
+ /* Just use the file size since st_blocks is unreliable on OneFS. */
+ result = get_file_size_stat(sbuf);
+
+ if (fsp && fsp->initial_allocation_size)
+ result = MAX(result,fsp->initial_allocation_size);
+
+ result = smb_roundup(handle->conn, result);
+
+ out:
+ END_PROFILE(syscall_get_alloc_size);
+ return result;
+}
+
static int onefs_statvfs(vfs_handle_struct *handle, const char *path,
vfs_statvfs_struct *statbuf)
{
@@ -123,6 +148,8 @@ static vfs_op_tuple onefs_ops[] = {
SMB_VFS_LAYER_TRANSPARENT},
{SMB_VFS_OP(onefs_lstat), SMB_VFS_OP_LSTAT,
SMB_VFS_LAYER_TRANSPARENT},
+ {SMB_VFS_OP(onefs_get_alloc_size), SMB_VFS_OP_GET_ALLOC_SIZE,
+ SMB_VFS_LAYER_OPAQUE},
{SMB_VFS_OP(onefs_unlink), SMB_VFS_OP_UNLINK,
SMB_VFS_LAYER_TRANSPARENT},
{SMB_VFS_OP(onefs_ntimes), SMB_VFS_OP_NTIMES,