On Wed, Jun 14, 2023 at 04:31:04PM +0800, Lu Hongfei wrote: > 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); Ah, no, that's not how we enable IOCB_NOWAIT functionality. Just because removing the check makes it go a little bit faster, it doesn't mean that it is actually doing the right thing. i.e. before remove IOCB_NOWAIT checks like this, we actually have to make the functionality operate in a non-blocking manner when IOCB_NOWAIT is set. Clearly, this patch does not do that, because the very first thing that occurs after the removed NOWAIT check is a blocking inode_lock() call.... Please go and look at the series that added NOWAIT buffered write support to XFS for io_uring an example of sorts of changes that need to be made to ext4 to support IOCB_NOWAIT buffered writes. https://lore.kernel.org/linux-xfs/20220608171741.3875418-1-shr@xxxxxx/ Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx