• Tao Ma's avatar
    ext4: fix readdir error in the case of inline_data+dir_index · 8af0f082
    Tao Ma authored
    Zach reported a problem that if inline data is enabled, we don't
    tell the difference between the offset of '.' and '..'. And a
    getdents will fail if the user only want to get '.' and what's worse,
    if there is a conversion happens when the user calls getdents
    many times, he/she may get the same entry twice.
    
    In theory, a dir block would also fail if it is converted to a
    hashed-index based dir since f_pos will become a hash value, not the
    real one, but it doesn't happen.  And a deep investigation shows that
    we uses a hash based solution even for a normal dir if the dir_index
    feature is enabled.
    
    So this patch just adds a new htree_inlinedir_to_tree for inline dir,
    and if we find that the hash index is supported, we will do like what
    we do for a dir block.
    Reported-by: default avatarZach Brown <zab@redhat.com>
    Signed-off-by: default avatarTao Ma <boyu.mt@taobao.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    8af0f082
ext4.h 96.6 KB