summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorAbhidnya Chirmule <achirmul@in.ibm.com>2009-09-16 07:22:32 +0200
committerVolker Lendecke <vl@samba.org>2009-09-17 02:24:13 +0200
commit277597de8548d6bcc65e7eff40b238415659eb17 (patch)
tree792dac2a091350a6e20e66c5b27b69decebc04f0 /source3/modules
parent919559573cf9484beeeb31aaaff844349972634d (diff)
downloadsamba-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.c42
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);