On Tue 20-11-12 15:02:15, Jeff Moyer wrote: > Jan Kara writes: > > >> @@ -1279,6 +1280,9 @@ struct ext4_sb_info { > >> /* workqueue for dio unwritten */ > >> struct workqueue_struct *dio_unwritten_wq; > >> > >> + /* workqueue for aio+dio+o_sync disk cache flushing */ > >> + struct workqueue_struct *aio_dio_flush_wq; > >> + > > Umm, I'm not completely decided whether we really need a separate > > workqueue. But it doesn't cost too much so I guess it makes some sense - > > fsync() is rather heavy so syncing won't starve extent conversion... > > I'm assuming you'd like me to convert the names from flush to fsync, > yes? Would be nicer, yes. > >> + > >> + /* > >> + * If we are running in nojournal mode, just flush the disk > >> + * cache and return. > >> + */ > >> + if (!journal) > >> + return blkdev_issue_flush(inode->i_sb->s_bdev, GFP_NOIO, NULL); > > And this is wrong as well - you need to do work similar to what > > ext4_sync_file() does. Actually it would be *much* better if these two > > sites used the same helper function. Which also poses an interesting > > question about locking - do we need i_mutex or not? Forcing a transaction > > commit is definitely OK without it, similarly as grabbing transaction ids > > from inode or ext4_should_journal_data() test. __sync_inode() call seems > > to be OK without i_mutex as well so I believe we can just get rid of it > > (getting i_mutex from the workqueue is a locking nightmare we don't want to > > return to). > > Just to be clear, are you saying you would like me to remove the > mutex_lock/unlock pair from ext4_sync_file? (I had already factored out > the common code between this new code path and the fsync path in my tree.) Yes, after some thinking I came to that conclusion. We actually need to keep i_mutex around ext4_flush_unwritten_io() to avoid livelocks but the rest doesn't need it. The change should be definitely a separate patch just in case there's something subtle I missed and we need to bisect in future... I've attached a patch for that so that blame for bugs goes my way ;) Compile tested only so far. I'll give it some more testing overnight. Honza -- Jan Kara SUSE Labs, CR