History

ext4: get rid of EXT4_GET_BLOCKS_NO_LOCK flag

When dioread_nolock mode is enabled, we grab i_data_sem in ext4_ext_direct_IO() and therefore we need to instruct _ext4_get_block() not to grab i_data_sem again using EXT4_GET_BLOCKS_NO_LOCK. However holding i_data_sem over overwrite direct IO isn't needed these days. We have exclusion against truncate / hole punching because we increase i_dio_count under i_mutex in ext4_ext_direct_IO() so once ext4_file_write_iter() verifies blocks are allocated & written, they are guaranteed to stay so during the whole direct IO even after we drop i_mutex. So we can just remove this locking abuse and the no longer necessary EXT4_GET_BLOCKS_NO_LOCK flag.

Jan Kara committed 10 years ago

Commit 2dcba471 parent e74031f3 files · +22 −28Browse files

Showing the changes to include/trace (1 of 3 files). Show all

Unified · Split

include/trace/events/ext4.h+1−2
@@ -42,8 +42,7 @@ struct extent_status; · 41 unmodified lines
4242 { EXT4_GET_BLOCKS_CONVERT, "CONVERT" }, \
4343 { EXT4_GET_BLOCKS_METADATA_NOFAIL, "METADATA_NOFAIL" }, \
4444 { EXT4_GET_BLOCKS_NO_NORMALIZE, "NO_NORMALIZE" }, \
45− { EXT4_GET_BLOCKS_KEEP_SIZE, "KEEP_SIZE" }, \
46− { EXT4_GET_BLOCKS_NO_LOCK, "NO_LOCK" })
45+ { EXT4_GET_BLOCKS_KEEP_SIZE, "KEEP_SIZE" })
4746
4847 #define show_mflags(flags) __print_flags(flags, "", \
4948 { EXT4_MAP_NEW, "N" }, \