Despite my previous reviewed-by tag this will need another fix: xfs_file_iomap_begin needs to return EAGAIN if we don't have the extent list in memoery already. E.g. something like this: if ((flags & IOMAP_NOWAIT) && !(ip->i_d.if_flags & XFS_IFEXTENTS)) { error = -EAGAIN; goto out_unlock; } right after locking the ilock.