diff options
author | Jan Kara <jack@suse.cz> | 2016-03-09 23:11:13 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2016-03-09 23:11:13 -0500 |
commit | 2d90c160e5f1d784e180f1e1458d56eee4d7f4f4 (patch) | |
tree | 883dc6e8433bbe315fa8fce00154d51ac52b3dd7 /fs/jbd2/journal.c | |
parent | e3fb8eb14eafd2847c04cf48b52a705c36f4db98 (diff) |
ext4: more efficient SEEK_DATA implementation
Using SEEK_DATA in a huge sparse file can easily lead to sotflockups as
ext4_seek_data() iterates hole block-by-block. Fix the problem by using
returned hole size from ext4_map_blocks() and thus skip the hole in one
go.
Update also SEEK_HOLE implementation to follow the same pattern as
SEEK_DATA to make future maintenance easier.
Furthermore we add cond_resched() to both ext4_seek_data() and
ext4_seek_hole() to avoid softlockups in case evil user creates huge
fragmented file and we have to go through lots of extents.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/jbd2/journal.c')
0 files changed, 0 insertions, 0 deletions