diff options
| -rw-r--r-- | fs/f2fs/dir.c | 11 |
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]; |
