> @@ -528,12 +528,17 @@ xfs_file_dio_aio_write(
>           ((iocb->ki_pos + count) & mp->m_blockmask)) {
>               unaligned_io = 1;
>               iolock = XFS_IOLOCK_EXCL;
> +             if (iocb->ki_flags & IOCB_NOWAIT)
> +                     return -EAGAIN;

So all unaligned I/O will return -EAGAIN?  Why?  Also please explain
that reason in a comment right here.

> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 1aa3abd..84f981a 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -1020,6 +1020,11 @@ xfs_file_iomap_begin(
>       if ((flags & IOMAP_REPORT) ||
>           (xfs_is_reflink_inode(ip) &&
>            (flags & IOMAP_WRITE) && (flags & IOMAP_DIRECT))) {
> +             /* Allocations due to reflinks */
> +             if ((flags & IOMAP_NOWAIT) && !(flags & IOMAP_REPORT)) {
> +                     error = -EAGAIN;
> +                     goto out_unlock;
> +             }

FYI, this code looks very different in current Linus' tree - I think
you're on some old kernel base.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to