summaryrefslogtreecommitdiff
path: root/fs/xfs/linux/xfs_iomap.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/linux/xfs_iomap.c')
-rw-r--r--fs/xfs/linux/xfs_iomap.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/xfs/linux/xfs_iomap.c b/fs/xfs/linux/xfs_iomap.c
index 322a8d3836..9769d225fb 100644
--- a/fs/xfs/linux/xfs_iomap.c
+++ b/fs/xfs/linux/xfs_iomap.c
@@ -120,7 +120,13 @@ xfs_iomap(
case PBF_FILE_ALLOCATE:
lockmode = XFS_ILOCK_SHARED|XFS_EXTSIZE_RD;
bmap_flags = XFS_BMAPI_ENTIRE;
- XFS_ILOCK(mp, io, lockmode);
+ /* Attempt non-blocking lock */
+ if (flags & PBF_TRYLOCK) {
+ if (!XFS_ILOCK_NOWAIT(mp, io, lockmode))
+ return XFS_ERROR(EAGAIN);
+ } else {
+ XFS_ILOCK(mp, io, lockmode);
+ }
break;
case PBF_FILE_UNWRITTEN:
lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR;