This patch updates the lock pattern in ext4_dio_read_iter() to only perform the trylock in IOCB_NOWAIT cases. Signed-off-by: Matthew Bobrowski <mbobrowski@xxxxxxxxxxxxxx> --- fs/ext4/file.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 6ea7e00e0204..8420686b90f5 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -52,7 +52,13 @@ static int ext4_dio_read_iter(struct kiocb *iocb, struct iov_iter *to) ssize_t ret; struct inode *inode = file_inode(iocb->ki_filp); - inode_lock_shared(inode); + if (iocb->ki_flags & IOCB_NOWAIT) { + if (!inode_trylock_shared(inode)) + return -EAGAIN; + } else { + inode_lock_shared(inode); + } + if (!ext4_dio_supported(inode)) { inode_unlock_shared(inode); /* -- 2.20.1 --<M>--