The branch, master has been updated
       via  276c161 vfs/glusterfs: in case atime is not passed, set it to the 
current atime
      from  0f9a189 s3:dir - We now pass the previously spinning directory 
tests on ext4.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 276c1616cf06741b69e06519ea61c874a686c716
Author: Niels de Vos <[email protected]>
Date:   Fri Jan 10 16:26:18 2014 +0100

    vfs/glusterfs: in case atime is not passed, set it to the current atime
    
    The Linux CIFS client does not pass an updated atime when a write() is
    done. This causes the vfs/glusterfs module to set the atime to -1 on the
    Gluster backend, resulting in an atime far in the future (year 2106).
    
    Signed-off-by: Niels de Vos <[email protected]>
    Reviewed-by: Ira Cooper <[email protected]>
    Reviewed-by: Jeremy Allison <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Wed Jan 15 21:31:30 CET 2014 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/modules/vfs_glusterfs.c |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index 3262f11..9bcd0cb 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -734,10 +734,28 @@ static int vfs_gluster_ntimes(struct vfs_handle_struct 
*handle,
 {
        struct timespec times[2];
 
-       times[0].tv_sec = ft->atime.tv_sec;
-       times[0].tv_nsec = ft->atime.tv_nsec;
-       times[1].tv_sec = ft->mtime.tv_sec;
-       times[1].tv_nsec = ft->mtime.tv_nsec;
+       if (null_timespec(ft->atime)) {
+               times[0].tv_sec = smb_fname->st.st_ex_atime.tv_sec;
+               times[0].tv_nsec = smb_fname->st.st_ex_atime.tv_nsec;
+       } else {
+               times[0].tv_sec = ft->atime.tv_sec;
+               times[0].tv_nsec = ft->atime.tv_nsec;
+       }
+
+       if (null_timespec(ft->mtime)) {
+               times[1].tv_sec = smb_fname->st.st_ex_mtime.tv_sec;
+               times[1].tv_nsec = smb_fname->st.st_ex_mtime.tv_nsec;
+       } else {
+               times[1].tv_sec = ft->mtime.tv_sec;
+               times[1].tv_nsec = ft->mtime.tv_nsec;
+       }
+
+       if ((timespec_compare(&times[0],
+                             &smb_fname->st.st_ex_atime) == 0) &&
+           (timespec_compare(&times[1],
+                             &smb_fname->st.st_ex_mtime) == 0)) {
+               return 0;
+       }
 
        return glfs_utimens(handle->data, smb_fname->base_name, times);
 }


-- 
Samba Shared Repository

Reply via email to