• Theodore Ts'o's avatar
    ext4: optimize locking for end_io extent conversion · b82e384c
    Theodore Ts'o authored
    Now that we are doing the locking correctly, we need to grab the
    i_completed_io_lock() twice per end_io.  We can clean this up by
    removing the structure from the i_complted_io_list, and use this as
    the locking mechanism to prevent ext4_flush_completed_IO() racing
    against ext4_end_io_work(), instead of clearing the
    EXT4_IO_END_UNWRITTEN in io->flag.
    
    In addition, if the ext4_convert_unwritten_extents() returns an error,
    we no longer keep the end_io structure on the linked list.  This
    doesn't help, because it tends to lock up the file system and wedges
    the system.  That's one way to call attention to the problem, but it
    doesn't help the overall robustness of the system.
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    b82e384c
fsync.c 7.86 KB