ext4: async direct IO for holes and fallocate support
For async direct IO that covers holes or fallocate, the end_io callback function now queued the convertion work on workqueue but don't flush the work rightaway as it might take too long to afford. But when fsync is called after all the data is completed, user expects the metadata also being updated before fsync returns. Thus we need to flush the conversion work when fsync() is called. This patch keep track of a listed of completed async direct io that has a work queued on workqueue. When fsync() is called, it will go through the list and do the conversion. Signed-off-by: Mingming Cao <cmm@us.ibm.com>
This commit is contained in:

committed by
Theodore Ts'o

parent
4c0425ff68
commit
8d5d02e6b1
@@ -44,6 +44,8 @@
|
||||
*
|
||||
* What we do is just kick off a commit and wait on it. This will snapshot the
|
||||
* inode to disk.
|
||||
*
|
||||
* i_mutex lock is held when entering and exiting this function
|
||||
*/
|
||||
|
||||
int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
|
||||
@@ -56,6 +58,9 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)
|
||||
|
||||
trace_ext4_sync_file(file, dentry, datasync);
|
||||
|
||||
ret = flush_aio_dio_completed_IO(inode);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
/*
|
||||
* data=writeback:
|
||||
* The caller's filemap_fdatawrite()/wait will sync the data.
|
||||
|
Reference in New Issue
Block a user