From 17bc3e4a9d8533d7a96a4069abe5b4f16246f082 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Fri, 13 Feb 2015 20:47:23 +0800 Subject: [PATCH 1/2] vfs_ceph: fix ntimes_fn callback add null timespec check for atime/mtime. Also add code that stores create_time by EA. Signed-off-by: Yan, Zheng --- source3/modules/vfs_ceph.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index b074e2d..7cb8053 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -752,8 +752,24 @@ static int cephwrap_ntimes(struct vfs_handle_struct *handle, { struct utimbuf buf; int result; - buf.actime = ft->atime.tv_sec; - buf.modtime = ft->mtime.tv_sec; + + if (null_timespec(ft->atime)) + buf.actime = smb_fname->st.st_ex_atime.tv_sec; + else + buf.actime = ft->atime.tv_sec; + + if (null_timespec(ft->mtime)) + buf.modtime = smb_fname->st.st_ex_mtime.tv_sec; + else + buf.modtime = ft->mtime.tv_sec; + + if (!null_timespec(ft->create_time)) + set_create_timespec_ea(handle->conn, smb_fname, ft->create_time); + + if (buf.actime == smb_fname->st.st_ex_atime.tv_sec && + buf.modtime == smb_fname->st.st_ex_mtime.tv_sec) + return 0; + result = ceph_utime(handle->data, smb_fname->base_name, &buf); DEBUG(10, ("[CEPH] ntimes(%p, %s, {%ld, %ld, %ld, %ld}) = %d\n", handle, smb_fname_str_dbg(smb_fname), ft->mtime.tv_sec, ft->atime.tv_sec, ft->ctime.tv_sec, -- 1.9.3