On 10:37 30/06, Filipe Manana wrote: > On Mon, Jun 22, 2020 at 5:22 PM Goldwyn Rodrigues <rgoldwyn@xxxxxxx> wrote: > > > > From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> > > > > This is to parallelize direct writes within EOF or with direct I/O > > reads. This covers the race with truncate() accidentally increasing the > > filesize. > > > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> > > --- > > fs/btrfs/file.c | 25 +++++++------------------ > > 1 file changed, 7 insertions(+), 18 deletions(-) > > > > diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c > > index aa6be931620b..c446a4aeb867 100644 > > --- a/fs/btrfs/file.c > > +++ b/fs/btrfs/file.c > > @@ -1957,12 +1957,18 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from) > > loff_t endbyte; > > int err; > > size_t count = 0; > > - bool relock = false; > > int flags = IOMAP_DIOF_PGINVALID_FAIL; > > int ilock_flags = 0; > > > > if (iocb->ki_flags & IOCB_NOWAIT) > > ilock_flags |= BTRFS_ILOCK_TRY; > > + /* > > + * If the write DIO within EOF, use a shared lock > > + */ > > + if (pos + count <= i_size_read(inode)) > > + ilock_flags |= BTRFS_ILOCK_SHARED; > > + else if (iocb->ki_flags & IOCB_NOWAIT) > > + return -EAGAIN; > > In the next iteration, please rebase the patchset on a more recent misc-next. > > That hunk returning -EAGAIN is buggy and was removed a couple weeks > ago in a patchset fixing several bugs with NOWAIT writes. > I worked against the vanilla and it is already ported in the git tree since your patch was added in the meantime. -- Goldwyn
