diff options
Diffstat (limited to 'io_uring/net.c')
| -rw-r--r-- | io_uring/net.c | 23 | 
1 files changed, 9 insertions, 14 deletions
diff --git a/io_uring/net.c b/io_uring/net.c index 15dea91625e2..ab83da7e80f0 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -67,8 +67,6 @@ struct io_sr_msg {  	struct io_kiocb 		*notif;  }; -#define IO_APOLL_MULTI_POLLED (REQ_F_APOLL_MULTISHOT | REQ_F_POLLED) -  int io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)  {  	struct io_shutdown *shutdown = io_kiocb_to_cmd(req, struct io_shutdown); @@ -591,7 +589,8 @@ static inline void io_recv_prep_retry(struct io_kiocb *req)   * again (for multishot).   */  static inline bool io_recv_finish(struct io_kiocb *req, int *ret, -				  unsigned int cflags, bool mshot_finished) +				  unsigned int cflags, bool mshot_finished, +				  unsigned issue_flags)  {  	if (!(req->flags & REQ_F_APOLL_MULTISHOT)) {  		io_req_set_res(req, *ret, cflags); @@ -614,7 +613,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret,  	io_req_set_res(req, *ret, cflags); -	if (req->flags & REQ_F_POLLED) +	if (issue_flags & IO_URING_F_MULTISHOT)  		*ret = IOU_STOP_MULTISHOT;  	else  		*ret = IOU_OK; @@ -773,8 +772,7 @@ retry_multishot:  	if (ret < min_ret) {  		if (ret == -EAGAIN && force_nonblock) {  			ret = io_setup_async_msg(req, kmsg, issue_flags); -			if (ret == -EAGAIN && (req->flags & IO_APOLL_MULTI_POLLED) == -					       IO_APOLL_MULTI_POLLED) { +			if (ret == -EAGAIN && (issue_flags & IO_URING_F_MULTISHOT)) {  				io_kbuf_recycle(req, issue_flags);  				return IOU_ISSUE_SKIP_COMPLETE;  			} @@ -803,7 +801,7 @@ retry_multishot:  	if (kmsg->msg.msg_inq)  		cflags |= IORING_CQE_F_SOCK_NONEMPTY; -	if (!io_recv_finish(req, &ret, cflags, mshot_finished)) +	if (!io_recv_finish(req, &ret, cflags, mshot_finished, issue_flags))  		goto retry_multishot;  	if (mshot_finished) { @@ -869,7 +867,7 @@ retry_multishot:  	ret = sock_recvmsg(sock, &msg, flags);  	if (ret < min_ret) {  		if (ret == -EAGAIN && force_nonblock) { -			if ((req->flags & IO_APOLL_MULTI_POLLED) == IO_APOLL_MULTI_POLLED) { +			if (issue_flags & IO_URING_F_MULTISHOT) {  				io_kbuf_recycle(req, issue_flags);  				return IOU_ISSUE_SKIP_COMPLETE;  			} @@ -902,7 +900,7 @@ out_free:  	if (msg.msg_inq)  		cflags |= IORING_CQE_F_SOCK_NONEMPTY; -	if (!io_recv_finish(req, &ret, cflags, ret <= 0)) +	if (!io_recv_finish(req, &ret, cflags, ret <= 0, issue_flags))  		goto retry_multishot;  	return ret; @@ -1289,8 +1287,7 @@ retry:  			 * return EAGAIN to arm the poll infra since it  			 * has already been done  			 */ -			if ((req->flags & IO_APOLL_MULTI_POLLED) == -			    IO_APOLL_MULTI_POLLED) +			if (issue_flags & IO_URING_F_MULTISHOT)  				ret = IOU_ISSUE_SKIP_COMPLETE;  			return ret;  		} @@ -1315,9 +1312,7 @@ retry:  		goto retry;  	io_req_set_res(req, ret, 0); -	if (req->flags & REQ_F_POLLED) -		return IOU_STOP_MULTISHOT; -	return IOU_OK; +	return (issue_flags & IO_URING_F_MULTISHOT) ? IOU_STOP_MULTISHOT : IOU_OK;  }  int io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)  | 
