diff options
author | Abhidnya Chirmule <achirmul@in.ibm.com> | 2009-09-16 07:22:32 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-09-17 02:24:13 +0200 |
commit | 277597de8548d6bcc65e7eff40b238415659eb17 (patch) | |
tree | 792dac2a091350a6e20e66c5b27b69decebc04f0 /source3/modules | |
parent | 919559573cf9484beeeb31aaaff844349972634d (diff) | |
download | samba-277597de8548d6bcc65e7eff40b238415659eb17.tar.gz samba-277597de8548d6bcc65e7eff40b238415659eb17.tar.bz2 samba-277597de8548d6bcc65e7eff40b238415659eb17.zip |
To set file create/birth time in GPFS. Signed-off-by: Abhidnya Chirmule <achirmul@in.ibm.com>
Diffstat (limited to 'source3/modules')
-rw-r--r-- | source3/modules/vfs_gpfs.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c index 3660bb2d3a..dbed89783e 100644 --- a/source3/modules/vfs_gpfs.c +++ b/source3/modules/vfs_gpfs.c @@ -1059,6 +1059,47 @@ static int vfs_gpfs_lstat(struct vfs_handle_struct *handle, return 0; } +static int vfs_gpfs_ntimes(struct vfs_handle_struct *handle, + const struct smb_filename *smb_fname, + struct smb_file_time *ft) +{ + + struct gpfs_winattr attrs; + int ret; + char *path = NULL; + NTSTATUS status; + + ret = SMB_VFS_NEXT_NTIMES(handle, smb_fname, ft); + if(ret == -1){ + DEBUG(1,("vfs_gpfs_ntimes: SMB_VFS_NEXT_NTIMES failed\n")); + return -1; + } + + if(null_timespec(ft->create_time)){ + DEBUG(10,("vfs_gpfs_ntimes:Create Time is NULL\n")); + return 0; + } + + status = get_full_smb_filename(talloc_tos(), smb_fname, &path); + if (!NT_STATUS_IS_OK) { + errno = map_errno_from_nt_status(status); + return -1; + } + + attrs.winAttrs = 0; + attrs.creationTime.tv_sec = ft->create_time.tv_sec; + attrs.creationTime.tv_nsec = ft->create_time.tv_nsec; + + ret = set_gpfs_winattrs(CONST_DISCARD(char *, path), + GPFS_WINATTR_SET_CREATION_TIME, &attrs); + if(ret == -1){ + DEBUG(1,("vfs_gpfs_ntimes: set GPFS ntimes failed %d\n",ret)); + return -1; + } + return 0; + +} + static struct vfs_fn_pointers vfs_gpfs_fns = { .kernel_flock = vfs_gpfs_kernel_flock, .setlease = vfs_gpfs_setlease, @@ -1079,6 +1120,7 @@ static struct vfs_fn_pointers vfs_gpfs_fns = { .stat = vfs_gpfs_stat, .fstat = vfs_gpfs_fstat, .lstat = vfs_gpfs_lstat, + .ntimes = vfs_gpfs_ntimes, }; NTSTATUS vfs_gpfs_init(void); |