This adds the async buffered write support to ext4, the following is the relevant test data. iodepth | 1 | 2 | 4 | 8 | 16 | 32 | before(M/s) | 842 | 1047 | 1098 | 1167 | 1172 | 1247 | after(M/s) | 1293 | 1674 | 1794 | 1862 | 1897 | 1833 | The following is the fio configuration: [global] ioengine=io_uring sqthread_poll=1 threads=1 iodepth=16 hipri=0 direct=0 fixedbufs=0 uncached=0 nowait=0 force_async=0 randrepeat=0 time_based=0 size=256M filename=/data/test/local/io_uring_test group_reporting [read256B-rand] bs=4096 rw=randwrite numjobs=1 Signed-off-by: Lu Hongfei <luhongfei@xxxxxxxx> Signed-off-by: Yangtao Li <frank.li@xxxxxxxx> --- fs/ext4/file.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 6a16d07965f9..5da7c5612324 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -288,9 +288,6 @@ static ssize_t ext4_buffered_write_iter(struct kiocb *iocb, ssize_t ret; struct inode *inode = file_inode(iocb->ki_filp); - if (iocb->ki_flags & IOCB_NOWAIT) - return -EOPNOTSUPP; - inode_lock(inode); ret = ext4_write_checks(iocb, from); if (ret <= 0) @@ -905,7 +902,7 @@ static int ext4_file_open(struct inode *inode, struct file *filp) return ret; } - filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | + filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_BUF_WASYNC | FMODE_DIO_PARALLEL_WRITE; return dquot_file_open(inode, filp); } -- 2.39.0