|
@@ -25,6 +25,7 @@
|
|
|
#include <linux/fs.h>
|
|
|
#include <linux/buffer_head.h>
|
|
|
#include <linux/slab.h>
|
|
|
+#include <linux/iversion.h>
|
|
|
#include "ext4.h"
|
|
|
#include "xattr.h"
|
|
|
|
|
@@ -208,7 +209,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
|
|
|
* readdir(2), then we might be pointing to an invalid
|
|
|
* dirent right now. Scan from the start of the block
|
|
|
* to make sure. */
|
|
|
- if (file->f_version != inode->i_version) {
|
|
|
+ if (inode_cmp_iversion(inode, file->f_version)) {
|
|
|
for (i = 0; i < sb->s_blocksize && i < offset; ) {
|
|
|
de = (struct ext4_dir_entry_2 *)
|
|
|
(bh->b_data + i);
|
|
@@ -227,7 +228,7 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
|
|
|
offset = i;
|
|
|
ctx->pos = (ctx->pos & ~(sb->s_blocksize - 1))
|
|
|
| offset;
|
|
|
- file->f_version = inode->i_version;
|
|
|
+ file->f_version = inode_query_iversion(inode);
|
|
|
}
|
|
|
|
|
|
while (ctx->pos < inode->i_size
|
|
@@ -568,10 +569,10 @@ static int ext4_dx_readdir(struct file *file, struct dir_context *ctx)
|
|
|
* cached entries.
|
|
|
*/
|
|
|
if ((!info->curr_node) ||
|
|
|
- (file->f_version != inode->i_version)) {
|
|
|
+ inode_cmp_iversion(inode, file->f_version)) {
|
|
|
info->curr_node = NULL;
|
|
|
free_rb_tree_fname(&info->root);
|
|
|
- file->f_version = inode->i_version;
|
|
|
+ file->f_version = inode_query_iversion(inode);
|
|
|
ret = ext4_htree_fill_tree(file, info->curr_hash,
|
|
|
info->curr_minor_hash,
|
|
|
&info->next_hash);
|