On Sun, Sep 09, 2012 at 09:27:09PM +0400, Dmitry Monakhov wrote: > Current unwritten extent conversion state-machine is very fuzzy. > - By unknown reason it want perform conversion under i_mutex. What for? > All this games with mutex_trylock result in following deadlock > truncate: kworker: > ext4_setattr ext4_end_io_work > mutex_lock(i_mutex) > inode_dio_wait(inode) ->BLOCK > DEADLOCK<- mutex_trylock() > inode_dio_done() > #TEST_CASE1_BEGIN > MNT=/mnt_scrach > unlink $MNT/file > fallocate -l $((1024*1024*1024)) $MNT/file > aio-stress -I 100000 -O -s 100m -n -t 1 -c 10 -o 2 -o 3 $MNT/file > sleep 2 > truncate -s 0 $MNT/file > #TEST_CASE1_END > > This patch makes state machine simple and clean: > > (1) ext4_flush_completed_IO is responsible for handling all pending > end_io from ei->i_completed_io_list(per inode list) > NOTE1: i_completed_io_lock is acquired only once > NOTE2: i_mutex is not required because it does not protect > any data guarded by i_mutex > > (2) xxx_end_io schedule end_io context completion simply by pushing it > to the inode's list. > NOTE1: because of (1) work should be queued only if > ->i_completed_io_list was empty at the moment, otherwise it > work is scheduled already. > > - remove useless END_IO_XXX flags > - Improve smp scalability by removing useless i_mutex which does not > protect anything > - Reduce lock contention on i_completed_io_lock > - Move open coded logic from various xx_end_xx routines to ext4_add_complete_io() > > Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> Looks good to me. You can add: Reviewed-by: Zheng Liu <wenqing.lz@xxxxxxxxxx> Regards, Zheng -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html