From: Christoph Hellwig <email@example.com> To: Goldwyn Rodrigues <firstname.lastname@example.org>, email@example.com, firstname.lastname@example.org Cc: email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org Subject: Re: [PATCH 0/10 v11] No wait AIO Date: Thu, 8 Jun 2017 00:39:10 -0700 [thread overview] Message-ID: <20170608073910.GB9292@infradead.org> (raw) In-Reply-To: <email@example.com> As already indicated this whole series looks fine to me. Al: are you going to pick this up? Or Andrew? On Tue, Jun 06, 2017 at 06:19:29AM -0500, Goldwyn Rodrigues wrote: > This series adds nonblocking feature to asynchronous I/O writes. > io_submit() can be delayed because of a number of reason: > - Block allocation for files > - Data writebacks for direct I/O > - Sleeping because of waiting to acquire i_rwsem > - Congested block device > > The goal of the patch series is to return -EAGAIN/-EWOULDBLOCK if > any of these conditions are met. This way userspace can push most > of the write()s to the kernel to the best of its ability to complete > and if it returns -EAGAIN, can defer it to another thread. > > In order to enable this, IOCB_RW_FLAG_NOWAIT is introduced in > uapi/linux/aio_abi.h. If set for aio_rw_flags, it translates to > IOCB_NOWAIT for struct iocb, REQ_NOWAIT for bio.bi_opf and IOMAP_NOWAIT for > iomap. aio_rw_flags is a new flag replacing aio_reserved1. We could > not use aio_flags because it is not currently checked for invalidity > in the kernel. > > This feature is provided for direct I/O of asynchronous I/O only. I have > tested it against xfs, ext4, and btrfs while I intend to add more filesystems. > The nowait feature is for request based devices. In the future, I intend to > add support to stacked devices such as md. > > Applications will have to check supportability > by sending a async direct write and any other error besides -EAGAIN > would mean it is not supported. > > First two patches are prep patches into nowait I/O. > > Changes since v1: > + changed name from _NONBLOCKING to *_NOWAIT > + filemap_range_has_page call moved to closer to (just before) calling filemap_write_and_wait_range(). > + BIO_NOWAIT limited to get_request() > + XFS fixes > - included reflink > - use of xfs_ilock_nowait() instead of a XFS_IOLOCK_NONBLOCKING flag > - Translate the flag through IOMAP_NOWAIT (iomap) to check for > block allocation for the file. > + ext4 coding style > > Changes since v2: > + Using aio_reserved1 as aio_rw_flags instead of aio_flags > + blk-mq support > + xfs uptodate with kernel and reflink changes > > Changes since v3: > + Added FS_NOWAIT, which is set if the filesystem supports NOWAIT feature. > + Checks in generic_make_request() to make sure BIO_NOWAIT comes in > for async direct writes only. > + Added QUEUE_FLAG_NOWAIT, which is set if the device supports BIO_NOWAIT. > This is added (rather not set) to block devices such as dm/md currently. > > Changes since v4: > + Ported AIO code to use RWF_* flags. Check for RWF_* flags in > generic_file_write_iter(). > + Changed IOCB_RW_FLAGS_NOWAIT to RWF_NOWAIT. > > Changes since v5: > + BIO_NOWAIT to REQ_NOWAIT > + Common helper for RWF flags. > > Changes since v6: > + REQ_NOWAIT will be ignored for request based devices since they > cannot block. So, removed QUEUE_FLAG_NOWAIT since it is not > required in the current implementation. It will be resurrected > when we program for stacked devices. > + changed kiocb_rw_flags() to kiocb_set_rw_flags() in order to accomodate > for errors. Moved checks in the function. > > Changes since v7: > + split patches into prep so the main patches are smaller and easier > to understand > + All patches are reviewed or acked! > > Changes since v8: > + Err out AIO reads with -EINVAL flagged as RWF_NOWAIT > > Changes since v9: > + Retract - Err out AIO reads with -EINVAL flagged as RWF_NOWAIT > + XFS returns EAGAIN if extent list is not in memory > + Man page updates to io_submit with iocb description and nowait features. > > Changes since v10: > + Corrected comment and subject in "return on congested block device" > > -- > Goldwyn > > ---end quoted text---
next prev parent reply other threads:[~2017-06-08 7:39 UTC|newest] Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-06-06 11:19 Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 01/10] fs: Separate out kiocb flags setup based on RWF_* flags Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 02/10] fs: Introduce filemap_range_has_page() Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 03/10] fs: Use RWF_* flags for AIO operations Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 04/10] fs: Introduce RWF_NOWAIT Goldwyn Rodrigues [not found] ` <20170606111939.27272-5-rgoldwyn-l3A5Bk7waGM@public.gmane.org> 2017-06-10 5:27 ` Al Viro 2017-06-06 11:19 ` [PATCH 05/10] fs: return if direct write will trigger writeback Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 06/10] fs: Introduce IOMAP_NOWAIT Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 07/10] block: return on congested block device Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 08/10] ext4: nowait aio support Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 09/10] xfs: " Goldwyn Rodrigues 2017-06-06 11:19 ` [PATCH 10/10] btrfs: " Goldwyn Rodrigues 2017-06-08 7:39 ` Christoph Hellwig [this message] 2017-06-10 5:34 ` [PATCH 0/10 v11] No wait AIO Al Viro 2017-06-12 22:38 ` Goldwyn Rodrigues [not found] ` <58bbe95e-5a4a-4387-3a00-16ed2e861bd3-l3A5Bk7waGM@public.gmane.org> 2017-06-13 6:14 ` Christoph Hellwig 2017-06-15 11:11 ` Al Viro 2017-06-15 14:55 ` Christoph Hellwig
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170608073910.GB9292@infradead.org \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [PATCH 0/10 v11] No wait AIO' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).