|
@@ -42,6 +42,7 @@
|
|
|
#include <linux/highmem.h>
|
|
|
#include <linux/quotaops.h>
|
|
|
#include <linux/sort.h>
|
|
|
+#include <linux/iversion.h>
|
|
|
|
|
|
#include <cluster/masklog.h>
|
|
|
|
|
@@ -1174,7 +1175,7 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir,
|
|
|
le16_add_cpu(&pde->rec_len,
|
|
|
le16_to_cpu(de->rec_len));
|
|
|
de->inode = 0;
|
|
|
- dir->i_version++;
|
|
|
+ inode_inc_iversion(dir);
|
|
|
ocfs2_journal_dirty(handle, bh);
|
|
|
goto bail;
|
|
|
}
|
|
@@ -1729,7 +1730,7 @@ int __ocfs2_add_entry(handle_t *handle,
|
|
|
if (ocfs2_dir_indexed(dir))
|
|
|
ocfs2_recalc_free_list(dir, handle, lookup);
|
|
|
|
|
|
- dir->i_version++;
|
|
|
+ inode_inc_iversion(dir);
|
|
|
ocfs2_journal_dirty(handle, insert_bh);
|
|
|
retval = 0;
|
|
|
goto bail;
|
|
@@ -1775,7 +1776,7 @@ static int ocfs2_dir_foreach_blk_id(struct inode *inode,
|
|
|
* readdir(2), then we might be pointing to an invalid
|
|
|
* dirent right now. Scan from the start of the block
|
|
|
* to make sure. */
|
|
|
- if (*f_version != inode->i_version) {
|
|
|
+ if (inode_cmp_iversion(inode, *f_version)) {
|
|
|
for (i = 0; i < i_size_read(inode) && i < offset; ) {
|
|
|
de = (struct ocfs2_dir_entry *)
|
|
|
(data->id_data + i);
|
|
@@ -1791,7 +1792,7 @@ static int ocfs2_dir_foreach_blk_id(struct inode *inode,
|
|
|
i += le16_to_cpu(de->rec_len);
|
|
|
}
|
|
|
ctx->pos = offset = i;
|
|
|
- *f_version = inode->i_version;
|
|
|
+ *f_version = inode_query_iversion(inode);
|
|
|
}
|
|
|
|
|
|
de = (struct ocfs2_dir_entry *) (data->id_data + ctx->pos);
|
|
@@ -1869,7 +1870,7 @@ static int ocfs2_dir_foreach_blk_el(struct inode *inode,
|
|
|
* readdir(2), then we might be pointing to an invalid
|
|
|
* dirent right now. Scan from the start of the block
|
|
|
* to make sure. */
|
|
|
- if (*f_version != inode->i_version) {
|
|
|
+ if (inode_cmp_iversion(inode, *f_version)) {
|
|
|
for (i = 0; i < sb->s_blocksize && i < offset; ) {
|
|
|
de = (struct ocfs2_dir_entry *) (bh->b_data + i);
|
|
|
/* It's too expensive to do a full
|
|
@@ -1886,7 +1887,7 @@ static int ocfs2_dir_foreach_blk_el(struct inode *inode,
|
|
|
offset = i;
|
|
|
ctx->pos = (ctx->pos & ~(sb->s_blocksize - 1))
|
|
|
| offset;
|
|
|
- *f_version = inode->i_version;
|
|
|
+ *f_version = inode_query_iversion(inode);
|
|
|
}
|
|
|
|
|
|
while (ctx->pos < i_size_read(inode)
|
|
@@ -1940,7 +1941,7 @@ static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
|
|
|
*/
|
|
|
int ocfs2_dir_foreach(struct inode *inode, struct dir_context *ctx)
|
|
|
{
|
|
|
- u64 version = inode->i_version;
|
|
|
+ u64 version = inode_query_iversion(inode);
|
|
|
ocfs2_dir_foreach_blk(inode, &version, ctx, true);
|
|
|
return 0;
|
|
|
}
|