diff options
Diffstat (limited to 'fs/ceph')
-rw-r--r-- | fs/ceph/inode.c | 13 |
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); |