aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/inode.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 5a9f907b805e..425c5b1f944e 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -567,12 +567,17 @@ static int fill_inode(struct inode *inode,
567 567
568 /* 568 /*
569 * provided version will be odd if inode value is projected, 569 * provided version will be odd if inode value is projected,
570 * even if stable. skip the update if we have a newer info 570 * even if stable. skip the update if we have newer stable
571 * (e.g., due to inode info racing form multiple MDSs), or if 571 * info (ours>=theirs, e.g. due to racing mds replies), unless
572 * we are getting projected (unstable) inode info. 572 * we are getting projected (unstable) info (in which case the
573 * version is odd, and we want ours>theirs).
574 * us them
575 * 2 2 skip
576 * 3 2 skip
577 * 3 3 update
573 */ 578 */
574 if (le64_to_cpu(info->version) > 0 && 579 if (le64_to_cpu(info->version) > 0 &&
575 (ci->i_version & ~1) > le64_to_cpu(info->version)) 580 (ci->i_version & ~1) >= le64_to_cpu(info->version))
576 goto no_change; 581 goto no_change;
577 582
578 issued = __ceph_caps_issued(ci, &implemented); 583 issued = __ceph_caps_issued(ci, &implemented);