From: Sage Weil Date: Mon, 5 May 2008 18:56:37 +0000 (-0700) Subject: kclient: clean up mtime/size attribute updates in fill_inode X-Git-Tag: v0.2~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=79368158ebeda3eab1c4df588cfe843a83031c5f;p=ceph.git kclient: clean up mtime/size attribute updates in fill_inode --- diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 723cfc734ea5..013c8a2e47fe 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -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; diff --git a/src/messages/MClientFileCaps.h b/src/messages/MClientFileCaps.h index 3275c29caf8c..8fd6654993e0 100644 --- a/src/messages/MClientFileCaps.h +++ b/src/messages/MClientFileCaps.h @@ -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) << ")"; }