hc
2024-05-10 10ebd8556b7990499c896a550e3d416b444211e6
kernel/include/linux/iversion.h
....@@ -113,6 +113,30 @@
113113 }
114114
115115 /**
116
+ * inode_set_max_iversion_raw - update i_version new value is larger
117
+ * @inode: inode to set
118
+ * @val: new i_version to set
119
+ *
120
+ * Some self-managed filesystems (e.g Ceph) will only update the i_version
121
+ * value if the new value is larger than the one we already have.
122
+ */
123
+static inline void
124
+inode_set_max_iversion_raw(struct inode *inode, u64 val)
125
+{
126
+ u64 cur, old;
127
+
128
+ cur = inode_peek_iversion_raw(inode);
129
+ for (;;) {
130
+ if (cur > val)
131
+ break;
132
+ old = atomic64_cmpxchg(&inode->i_version, cur, val);
133
+ if (likely(old == cur))
134
+ break;
135
+ cur = old;
136
+ }
137
+}
138
+
139
+/**
116140 * inode_set_iversion - set i_version to a particular value
117141 * @inode: inode to set
118142 * @val: new i_version value to set