aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/f2fs/dir.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 7a4c742aa..547d3477d 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -513,8 +513,12 @@ void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
memcpy(d->filename[bit_pos], name->name, name->len);
de->ino = cpu_to_le32(ino);
set_de_type(de, mode);
- for (i = 0; i < slots; i++)
+ for (i = 0; i < slots; i++) {
test_and_set_bit_le(bit_pos + i, (void *)d->bitmap);
+ /* avoid wrong garbage data for readdir */
+ if (i)
+ (de + i)->name_len = 0;
+ }
}
/*
@@ -797,6 +801,11 @@ bool f2fs_fill_dentries(struct file *file, void *dirent, filldir_t filldir,
de = &d->dentry[bit_pos];
+ if (de->name_len == 0) {
+ bit_pos++;
+ continue;
+ }
+
if (types && de->file_type < F2FS_FT_MAX)
d_type = types[de->file_type];