Merge branch 'spi-5.3' into spi-5.4
[linux-2.6-microblaze.git] / include / linux / iversion.h
index be50ef7..2917ef9 100644 (file)
@@ -112,6 +112,30 @@ inode_peek_iversion_raw(const struct inode *inode)
        return atomic64_read(&inode->i_version);
 }
 
+/**
+ * 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