linux/fs/ext4
Tao Ma 8af0f08227 ext4: fix readdir error in the case of inline_data+dir_index
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: Zach Brown <zab@redhat.com>
Signed-off-by: Tao Ma <boyu.mt@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2013-04-19 17:53:09 -04:00
..
acl.c ext4: fix the number of credits needed for acl ops with inline data 2013-02-09 15:23:03 -05:00
acl.h
balloc.c ext4: introduce reserved space 2013-04-09 22:11:22 -04:00
bitmap.c
block_validity.c
dir.c ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
ext4_extents.h ext4: mext_insert_extents should update extent block checksum 2013-04-19 14:04:12 -04:00
ext4_jbd2.c ext4: add might_sleep() annotations 2013-04-03 22:00:52 -04:00
ext4_jbd2.h ext4: improve credit estimate for EXT4_SINGLEDATA_TRANS_BLOCKS 2013-04-09 12:39:26 -04:00
ext4.h ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
extents_status.c ext4: update extent status tree after an extent is zeroed out 2013-03-10 21:13:05 -04:00
extents_status.h ext4: update extent status tree after an extent is zeroed out 2013-03-10 21:13:05 -04:00
extents.c ext4: mext_insert_extents should update extent block checksum 2013-04-19 14:04:12 -04:00
file.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-02-26 20:16:07 -08:00
fsync.c ext4/jbd2: don't wait (forever) for stale tid caused by wraparound 2013-04-03 22:02:52 -04:00
hash.c ext4: reduce one "if" comparison in ext4_dirhash() 2013-02-01 22:33:21 -05:00
ialloc.c ext4: move quota initialization out of inode allocation transaction 2013-04-19 13:38:14 -04:00
indirect.c ext4: refactor truncate code 2013-04-03 12:47:17 -04:00
inline.c ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
inode.c ext4: use io_end for multiple bios 2013-04-11 23:56:53 -04:00
ioctl.c ext4: fix usless declarations 2013-04-09 22:48:36 -04:00
Kconfig
Makefile
mballoc.c ext4: fix usless declarations 2013-04-09 22:48:36 -04:00
mballoc.h ext4: use module parameters instead of debugfs for mballoc_debug 2013-02-09 16:28:20 -05:00
migrate.c ext4: do not convert to indirect with bigalloc enabled 2013-04-11 10:54:46 -04:00
mmp.c ext4: fix big-endian bug in metadata checksum calculations 2013-04-09 23:56:48 -04:00
move_extent.c ext4: mext_insert_extents should update extent block checksum 2013-04-19 14:04:12 -04:00
namei.c ext4: fix readdir error in the case of inline_data+dir_index 2013-04-19 17:53:09 -04:00
page-io.c ext4: clear buffer_uninit flag when submitting IO 2013-04-12 00:03:19 -04:00
resize.c ext4: introduce ext4_get_group_number() 2013-04-03 23:32:34 -04:00
super.c ext4: Use kstrtoul() instead of parse_strtoul() 2013-04-11 23:37:19 -04:00
symlink.c
truncate.h
xattr_security.c
xattr_trusted.c
xattr_user.c
xattr.c ext4: fix miscellaneous big endian warnings 2013-04-09 23:59:55 -04:00
xattr.h ext4: reserve xattr index for Rich ACL support 2013-04-18 14:53:15 -04:00