diff options
Diffstat (limited to 'fs/xfs/linux/xfs_iomap.c')
| -rw-r--r-- | fs/xfs/linux/xfs_iomap.c | 8 |
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; |
