Skip to contentSkip to conversation

Potential bug in fs/ext4/inline.c?

DISCUSSION Theodore Ts'o 3 participants 3 messages Aug 21, 2014 – Aug 22, 2014

lore
Share & tools
lore
#0 lore raw

In ext4_find_inline_entry(), there is the following:

	if (ext4_get_inline_size(dir) == EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

Am I missing something, or shouldn't this be:

	if (ext4_get_inline_size(dir) <= EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

?

Thanks,

- Ted

#1 lore raw
Quoted 11 lines · Theodore Ts'o

In ext4_find_inline_entry(), there is the following:

	if (ext4_get_inline_size(dir) == EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

Am I missing something, or shouldn't this be:

	if (ext4_get_inline_size(dir) <= EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

?

I'm not sure it matters, since I see:

EXT4_I(inode)->i_inline_size = len + EXT4_MIN_INLINE_DATA_SIZE

scattered all over the code. I'm not sure I like the idea that both ext4 and e2fsprogs think that the inline data size is never <= 60, but afaict it doesn't cause any problems.

--D

Quoted 12 lines

Thanks,

- Ted

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
In reply to Theodore Ts'o
Quoted 9 lines · Theodore Ts'o

In ext4_find_inline_entry(), there is the following:

	if (ext4_get_inline_size(dir) == EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

Am I missing something, or shouldn't this be:

	if (ext4_get_inline_size(dir) <= EXT4_MIN_INLINE_DATA_SIZE)
		goto out;

Hi Ted,

The original design idea is that the size of inline data shouldn't be less than EXT4_MIN_INLINE_DATA_SIZE (60 bytes). That means that the inline data will occupy the whole i_block[] space.

If we create a new dir with inline data feature, the disk layout will looks like below (ext4_try_create_inline_dir()):

i_block[0]: parent ino (4 bytes)
i_block+4: dir entry (ino 0, rec_len 56 bytes)

Regards,
- Zheng