From: Hao Xu <howeyxu@xxxxxxxxxxx> To support nowait llseek(), IOMAP_NOWAIT semantics should be respected. In xfs, xfs_seek_iomap_begin() is the only place which may be blocked by ilock and extent loading. Let's turn it into trylock logic just like what we've done in xfs_readdir(). Signed-off-by: Hao Xu <howeyxu@xxxxxxxxxxx> --- fs/xfs/xfs_iomap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 18c8f168b153..bbd7c6b27701 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -1294,7 +1294,9 @@ xfs_seek_iomap_begin( if (xfs_is_shutdown(mp)) return -EIO; - lockmode = xfs_ilock_data_map_shared(ip); + lockmode = xfs_ilock_data_map_shared_generic(ip, flags & IOMAP_NOWAIT); + if (!lockmode) + return -EAGAIN; error = xfs_iread_extents(NULL, ip, XFS_DATA_FORK); if (error) goto out_unlock; -- 2.25.1