]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: update ctime when modifying file content 24022/head
authorYan, Zheng <zyan@redhat.com>
Tue, 11 Sep 2018 06:55:24 +0000 (14:55 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 12 Sep 2018 13:27:33 +0000 (21:27 +0800)
Fixes: http://tracker.ceph.com/issues/35945
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/client/Client.cc
src/mds/Locker.cc

index e8b83e10eb729dff4b60654949519b1f1faeb132..90c48599e92f17d69376be02c546ebbe7fa064f3 100644 (file)
@@ -9515,7 +9515,7 @@ success:
   }
 
   // mtime
-  in->mtime = ceph_clock_now();
+  in->mtime = in->ctime = ceph_clock_now();
   in->change_attr++;
   in->mark_caps_dirty(CEPH_CAP_FILE_WR);
 
@@ -13307,7 +13307,7 @@ int Client::_fallocate(Fh *fh, int mode, int64_t offset, int64_t length)
         in->inline_data = bl;
         in->inline_version++;
       }
-      in->mtime = ceph_clock_now();
+      in->mtime = in->ctime = ceph_clock_now();
       in->change_attr++;
       in->mark_caps_dirty(CEPH_CAP_FILE_WR);
     } else {
@@ -13327,7 +13327,7 @@ int Client::_fallocate(Fh *fh, int mode, int64_t offset, int64_t length)
                  offset, length,
                  ceph::real_clock::now(),
                  0, true, &onfinish);
-      in->mtime = ceph_clock_now();
+      in->mtime = in->ctime = ceph_clock_now();
       in->change_attr++;
       in->mark_caps_dirty(CEPH_CAP_FILE_WR);
 
@@ -13340,7 +13340,7 @@ int Client::_fallocate(Fh *fh, int mode, int64_t offset, int64_t length)
     uint64_t size = offset + length;
     if (size > in->size) {
       in->size = size;
-      in->mtime = ceph_clock_now();
+      in->mtime = in->ctime = ceph_clock_now();
       in->change_attr++;
       in->mark_caps_dirty(CEPH_CAP_FILE_WR);
 
index d70d77453d99119a60fe1e44e23a9e86b2af7c93..4b11cd37c497da54c7be5da6b8b58632a996316d 100644 (file)
@@ -3215,6 +3215,8 @@ void Locker::_update_cap_fields(CInode *in, int dirty, const MClientCaps::const_
       dout(7) << "  mtime " << pi->mtime << " -> " << mtime
              << " for " << *in << dendl;
       pi->mtime = mtime;
+      if (mtime > pi->rstat.rctime)
+       pi->rstat.rctime = mtime;
     }
     if (in->inode.is_file() &&   // ONLY if regular file
        size > pi->size) {