]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: clean up mtime/size attribute updates in fill_inode
authorSage Weil <sage@newdream.net>
Mon, 5 May 2008 18:56:37 +0000 (11:56 -0700)
committerSage Weil <sage@newdream.net>
Mon, 5 May 2008 18:56:37 +0000 (11:56 -0700)
src/kernel/inode.c
src/messages/MClientFileCaps.h

index 723cfc734ea59c3e2f88359be8b8b96a1c5cf32a..013c8a2e47fec8bba4ff81a50fcfaa7d521db05e 100644 (file)
@@ -103,20 +103,21 @@ int ceph_fill_inode(struct inode *inode, struct ceph_mds_reply_inode *info)
        ceph_decode_timespec(&mtime, &info->mtime);
        ceph_decode_timespec(&ctime, &info->ctime);
        issued = __ceph_caps_issued(ci);
-       if (issued & (CEPH_CAP_WR|CEPH_CAP_WRBUFFER)) {
-               if ((issued & CEPH_CAP_EXCL) == 0) {
-                       if (size > inode->i_size) {
-                               inode->i_size = size;
-                               inode->i_blkbits = blkbits;
-                               inode->i_blocks = blocks;
-                       }
-                       if (timespec_compare(&mtime, &inode->i_mtime) > 0)
-                               inode->i_mtime = mtime;
-                       if (timespec_compare(&atime, &inode->i_atime) > 0)
-                               inode->i_atime = atime;
-                       if (timespec_compare(&ctime, &inode->i_ctime) > 0)
-                               inode->i_ctime = ctime;
+       if (issued & CEPH_CAP_EXCL) {
+               if (timespec_compare(&ctime, &inode->i_ctime) > 0)
+                       inode->i_ctime = ctime;
+       } else if (issued & (CEPH_CAP_WR|CEPH_CAP_WRBUFFER)) {
+               if (size > inode->i_size) {
+                       inode->i_size = size;
+                       inode->i_blkbits = blkbits;
+                       inode->i_blocks = blocks;
                }
+               if (timespec_compare(&mtime, &inode->i_mtime) > 0)
+                       inode->i_mtime = mtime;
+               if (timespec_compare(&atime, &inode->i_atime) > 0)
+                       inode->i_atime = atime;
+               if (timespec_compare(&ctime, &inode->i_ctime) > 0)
+                       inode->i_ctime = ctime;
        } else {
                inode->i_size = size;
                inode->i_blkbits = blkbits;
index 3275c29caf8cb31c2a388a0fda707c2257e7bd69..8fd6654993e0dec02645ba54df059ca58fe0f33e 100644 (file)
@@ -94,6 +94,7 @@ class MClientFileCaps : public Message {
        << " caps " << cap_string(h.caps)
        << " wanted" << cap_string(h.wanted)
        << " size " << h.size << "/" << h.max_size
+       << " mtime " << utime_t(h.mtime)
        << ")";
   }