Message ID | 20150311224618.23777.38330.stgit@tstruk-mobl1 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Mar 11, 2015 at 03:46:18PM -0700, Tadeusz Struk wrote:
> AIO interface should prefer AIO operations over iter_op
What the devil for? read_iter and write_iter *ARE* aio operations, as much
as soon to be removed aio_read and aio_write. And yes, those are going to
be removed very soon.
Note that ->read_iter() and ->write_iter() are getting iocb pointer passed
to them. It's just that socket instances are not passing it along to
->sendmsg/->recvmsg anymore.
And why, in name of everything unholy, do your methods get redundant
total_len argument? It's iov_iter_count(&msg->msg_iter) (and in iov_iter-net
I have an inline helper doing that - enough places open-coding that thing).
If nothing else, ->sendmsg() and ->recvmsg() would benefit from removing
that argument as well. I have patches doing that, but iocb removal conflicts
with them and they need to be rebased to current net/master...
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 03/11/2015 11:48 PM, Al Viro wrote: >> AIO interface should prefer AIO operations over iter_op > What the devil for? read_iter and write_iter *ARE* aio operations, as much > as soon to be removed aio_read and aio_write. And yes, those are going to > be removed very soon. That's fine. When those will get removed, then as part of the cleanup we can merge sock_read_iter() with sock_aio_read() and sock_write_iter() with sock_aio_write() and call sock_recvmsg()/sock_sendmsg() or sock->ops->aio_recvmsg()/sock->ops->aio_sendmsg based on if (is_sync_kiocb(iocb)) > > Note that ->read_iter() and ->write_iter() are getting iocb pointer passed > to them. It's just that socket instances are not passing it along to > ->sendmsg/->recvmsg anymore. and that's the main reason why I have added the sock_aio_read() and sock_aio_write() I didn't want to mess with the sock_read_iter() and sock_write_iter() for now. > > And why, in name of everything unholy, do your methods get redundant > total_len argument? It's iov_iter_count(&msg->msg_iter) (and in iov_iter-net > I have an inline helper doing that - enough places open-coding that thing). > If nothing else, ->sendmsg() and ->recvmsg() would benefit from removing > that argument as well. I have patches doing that, but iocb removal conflicts > with them and they need to be rebased to current net/master... You are right, it's not needed at all. I took the signatures from sendmsg() and recvmsg() and just added iocb. I will remove them in v2 if you want, or you can add it to your patches. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/aio.c b/fs/aio.c index f8e52a1..389f4dd 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1449,11 +1449,15 @@ rw_common: if (rw == WRITE) file_start_write(file); - if (iter_op) { + if (rw_op) { + ret = rw_op(req, iovec, nr_segs, req->ki_pos); + } else if (iter_op) { iov_iter_init(&iter, rw, iovec, nr_segs, req->ki_nbytes); ret = iter_op(req, &iter); } else { - ret = rw_op(req, iovec, nr_segs, req->ki_pos); + if (iovec != inline_vecs) + kfree(iovec); + return -EINVAL; } if (rw == WRITE)
AIO interface should prefer AIO operations over iter_op Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com> --- fs/aio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html