提交 7a7cacba 编写于 作者: P Pavel Begunkov 提交者: Jens Axboe

io_uring: indent left {send,recv}[msg]()

Flip over "if (sock)" condition with return on error, the upper layer
will take care. That change will be handy later, but already removes
an extra jump from hot path.
Signed-off-by: NPavel Begunkov <asml.silence@gmail.com>
Signed-off-by: NJens Axboe <axboe@kernel.dk>
上级 06ef3608
......@@ -3916,14 +3916,14 @@ static int io_sendmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
struct io_comp_state *cs)
{
struct io_async_msghdr *kmsg = NULL;
struct io_async_msghdr iomsg, *kmsg = NULL;
struct socket *sock;
unsigned flags;
int ret;
sock = sock_from_file(req->file, &ret);
if (sock) {
struct io_async_msghdr iomsg;
unsigned flags;
if (unlikely(!sock))
return ret;
if (req->io) {
kmsg = &req->io->msg;
......@@ -3950,7 +3950,6 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
return io_setup_async_msg(req, kmsg);
if (ret == -ERESTARTSYS)
ret = -EINTR;
}
if (kmsg && kmsg->iov != kmsg->fast_iov)
kfree(kmsg->iov);
......@@ -3964,19 +3963,19 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock,
static int io_send(struct io_kiocb *req, bool force_nonblock,
struct io_comp_state *cs)
{
struct socket *sock;
int ret;
sock = sock_from_file(req->file, &ret);
if (sock) {
struct io_sr_msg *sr = &req->sr_msg;
struct msghdr msg;
struct iovec iov;
struct socket *sock;
unsigned flags;
int ret;
ret = import_single_range(WRITE, sr->buf, sr->len, &iov,
&msg.msg_iter);
if (ret)
sock = sock_from_file(req->file, &ret);
if (unlikely(!sock))
return ret;
ret = import_single_range(WRITE, sr->buf, sr->len, &iov, &msg.msg_iter);
if (unlikely(ret))
return ret;
msg.msg_name = NULL;
......@@ -3996,7 +3995,6 @@ static int io_send(struct io_kiocb *req, bool force_nonblock,
return -EAGAIN;
if (ret == -ERESTARTSYS)
ret = -EINTR;
}
if (ret < 0)
req_set_fail_links(req);
......@@ -4149,15 +4147,15 @@ static int io_recvmsg_prep(struct io_kiocb *req,
static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
struct io_comp_state *cs)
{
struct io_async_msghdr *kmsg = NULL;
struct io_async_msghdr iomsg, *kmsg = NULL;
struct socket *sock;
struct io_buffer *kbuf;
unsigned flags;
int ret, cflags = 0;
sock = sock_from_file(req->file, &ret);
if (sock) {
struct io_buffer *kbuf;
struct io_async_msghdr iomsg;
unsigned flags;
if (unlikely(!sock))
return ret;
if (req->io) {
kmsg = &req->io->msg;
......@@ -4200,11 +4198,11 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock,
ret = -EINTR;
if (kbuf)
kfree(kbuf);
}
if (kmsg && kmsg->iov != kmsg->fast_iov)
kfree(kmsg->iov);
req->flags &= ~REQ_F_NEED_CLEANUP;
if (ret < 0)
req_set_fail_links(req);
__io_req_complete(req, ret, cflags, cs);
......@@ -4215,16 +4213,17 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
struct io_comp_state *cs)
{
struct io_buffer *kbuf = NULL;
struct socket *sock;
int ret, cflags = 0;
sock = sock_from_file(req->file, &ret);
if (sock) {
struct io_sr_msg *sr = &req->sr_msg;
void __user *buf = sr->buf;
struct msghdr msg;
void __user *buf = sr->buf;
struct socket *sock;
struct iovec iov;
unsigned flags;
int ret, cflags = 0;
sock = sock_from_file(req->file, &ret);
if (unlikely(!sock))
return ret;
kbuf = io_recv_buffer_select(req, &cflags, !force_nonblock);
if (IS_ERR(kbuf))
......@@ -4232,9 +4231,8 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
else if (kbuf)
buf = u64_to_user_ptr(kbuf->addr);
ret = import_single_range(READ, buf, sr->len, &iov,
&msg.msg_iter);
if (ret) {
ret = import_single_range(READ, buf, sr->len, &iov, &msg.msg_iter);
if (unlikely(ret)) {
kfree(kbuf);
return ret;
}
......@@ -4258,7 +4256,6 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock,
return -EAGAIN;
if (ret == -ERESTARTSYS)
ret = -EINTR;
}
kfree(kbuf);
req->flags &= ~REQ_F_NEED_CLEANUP;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册