ext4: check inline directory before converting
Before converting an inline directory to a regular directory, check the directory entries to make sure they're not obviously broken. This helps us to avoid a BUG_ON if one of the dirents is trashed. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Andreas Dilger <adilger@dilger.ca>
This commit is contained in:

committed by
Theodore Ts'o

parent
6e2631463f
commit
40b163f1c4
@@ -1172,6 +1172,18 @@ static int ext4_convert_inline_data_nolock(handle_t *handle,
|
||||
if (error < 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Make sure the inline directory entries pass checks before we try to
|
||||
* convert them, so that we avoid touching stuff that needs fsck.
|
||||
*/
|
||||
if (S_ISDIR(inode->i_mode)) {
|
||||
error = ext4_check_all_de(inode, iloc->bh,
|
||||
buf + EXT4_INLINE_DOTDOT_SIZE,
|
||||
inline_size - EXT4_INLINE_DOTDOT_SIZE);
|
||||
if (error)
|
||||
goto out;
|
||||
}
|
||||
|
||||
error = ext4_destroy_inline_data_nolock(handle, inode);
|
||||
if (error)
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user