diff options
| author | Alex Deucher <alexander.deucher@amd.com> | 2019-08-09 13:07:28 -0500 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-08-09 13:07:28 -0500 |
| commit | 3f61fd41f38328f0a585eaba2d72d339fe9aecda (patch) | |
| tree | 4a6fe7dc98a44dec003833a7fa440daa6c304a28 /include/linux/iversion.h | |
| parent | 6ca523d7eb198b78f79df882b7dc4a8c795d8777 (diff) | |
| parent | e21a712a9685488f5ce80495b37b9fdbe96c230d (diff) | |
Merge tag 'v5.3-rc3' into drm-next-5.4
Linux 5.3-rc3
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'include/linux/iversion.h')
| -rw-r--r-- | include/linux/iversion.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/include/linux/iversion.h b/include/linux/iversion.h index be50ef7cedab..2917ef990d43 100644 --- a/include/linux/iversion.h +++ b/include/linux/iversion.h @@ -113,6 +113,30 @@ inode_peek_iversion_raw(const struct inode *inode) } /** + * inode_set_max_iversion_raw - update i_version new value is larger + * @inode: inode to set + * @val: new i_version to set + * + * Some self-managed filesystems (e.g Ceph) will only update the i_version + * value if the new value is larger than the one we already have. + */ +static inline void +inode_set_max_iversion_raw(struct inode *inode, u64 val) +{ + u64 cur, old; + + cur = inode_peek_iversion_raw(inode); + for (;;) { + if (cur > val) + break; + old = atomic64_cmpxchg(&inode->i_version, cur, val); + if (likely(old == cur)) + break; + cur = old; + } +} + +/** * inode_set_iversion - set i_version to a particular value * @inode: inode to set * @val: new i_version value to set |
