The patch titled Subject: fs: introduce RWF_NOWAIT and FMODE_AIO_NOWAIT has been added to the -mm tree. Its filename is fs-introduce-rwf_nowait-and-fmode_aio_nowait.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/fs-introduce-rwf_nowait-and-fmode_aio_nowait.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/fs-introduce-rwf_nowait-and-fmode_aio_nowait.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> Subject: fs: introduce RWF_NOWAIT and FMODE_AIO_NOWAIT RWF_NOWAIT informs kernel to bail out if an AIO request will block for reasons such as file allocations, or a writeback triggered, or would block while allocating requests while performing direct I/O. RWF_NOWAIT is translated to IOCB_NOWAIT for iocb->ki_flags. FMODE_AIO_NOWAIT is a flag which identifies the file opened is capable of returning -EAGAIN if the AIO call will block. This must be set by supporting filesystems in the ->open() call. Filesystems xfs, btrfs and ext4 would be supported in the following patches. Link: http://lkml.kernel.org/r/20170615160002.17233-5-rgoldwyn@xxxxxxx Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Jan Kara <jack@xxxxxxx> Cc: "Theodore Ts'o" <tytso@xxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Andreas Dilger <adilger.kernel@xxxxxxxxx> Cc: Chris Mason <clm@xxxxxx> Cc: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Cc: David Sterba <dsterba@xxxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Cc: Josef Bacik <jbacik@xxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/aio.c | 6 ++++++ include/linux/fs.h | 11 ++++++++++- include/uapi/linux/fs.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff -puN fs/aio.c~fs-introduce-rwf_nowait-and-fmode_aio_nowait fs/aio.c --- a/fs/aio.c~fs-introduce-rwf_nowait-and-fmode_aio_nowait +++ a/fs/aio.c @@ -1592,6 +1592,12 @@ static int io_submit_one(struct kioctx * goto out_put_req; } + if ((req->common.ki_flags & IOCB_NOWAIT) && + !(req->common.ki_flags & IOCB_DIRECT)) { + ret = -EOPNOTSUPP; + goto out_put_req; + } + ret = put_user(KIOCB_KEY, &user_iocb->aio_key); if (unlikely(ret)) { pr_debug("EFAULT: aio_key\n"); diff -puN include/linux/fs.h~fs-introduce-rwf_nowait-and-fmode_aio_nowait include/linux/fs.h --- a/include/linux/fs.h~fs-introduce-rwf_nowait-and-fmode_aio_nowait +++ a/include/linux/fs.h @@ -142,6 +142,9 @@ typedef int (dio_iodone_t)(struct kiocb /* File was opened by fanotify and shouldn't generate fanotify events */ #define FMODE_NONOTIFY ((__force fmode_t)0x4000000) +/* File is capable of returning -EAGAIN if AIO will block */ +#define FMODE_AIO_NOWAIT ((__force fmode_t)0x8000000) + /* * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector * that indicates that they should check the contents of the iovec are @@ -268,6 +271,7 @@ struct writeback_control; #define IOCB_DSYNC (1 << 4) #define IOCB_SYNC (1 << 5) #define IOCB_WRITE (1 << 6) +#define IOCB_NOWAIT (1 << 7) struct kiocb { struct file *ki_filp; @@ -3060,9 +3064,14 @@ static inline int iocb_flags(struct file static inline int kiocb_set_rw_flags(struct kiocb *ki, int flags) { - if (unlikely(flags & ~(RWF_HIPRI | RWF_DSYNC | RWF_SYNC))) + if (unlikely(flags & ~(RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT))) return -EOPNOTSUPP; + if (flags & RWF_NOWAIT) { + if (!(ki->ki_filp->f_mode & FMODE_AIO_NOWAIT)) + return -EOPNOTSUPP; + ki->ki_flags |= IOCB_NOWAIT; + } if (flags & RWF_HIPRI) ki->ki_flags |= IOCB_HIPRI; if (flags & RWF_DSYNC) diff -puN include/uapi/linux/fs.h~fs-introduce-rwf_nowait-and-fmode_aio_nowait include/uapi/linux/fs.h --- a/include/uapi/linux/fs.h~fs-introduce-rwf_nowait-and-fmode_aio_nowait +++ a/include/uapi/linux/fs.h @@ -360,5 +360,6 @@ struct fscrypt_key { #define RWF_HIPRI 0x00000001 /* high priority request, poll if possible */ #define RWF_DSYNC 0x00000002 /* per-IO O_DSYNC */ #define RWF_SYNC 0x00000004 /* per-IO O_SYNC */ +#define RWF_NOWAIT 0x00000008 /* per-IO, return -EAGAIN if operation would block */ #endif /* _UAPI_LINUX_FS_H */ _ Patches currently in -mm which might be from rgoldwyn@xxxxxxxx are fs-separate-out-kiocb-flags-setup-based-on-rwf_-flags.patch fs-introduce-filemap_range_has_page.patch fs-use-rwf_-flags-for-aio-operations.patch fs-introduce-rwf_nowait-and-fmode_aio_nowait.patch fs-return-if-direct-write-will-trigger-writeback.patch fs-introduce-iomap_nowait.patch block-return-on-congested-block-device.patch ext4-nowait-aio-support.patch xfs-nowait-aio-support.patch btrfs-nowait-aio-support.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html