diff options
| author | Christian Brauner <brauner@kernel.org> | 2025-09-17 12:01:05 +0200 | 
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2025-09-19 14:26:14 +0200 | 
| commit | 7914f15c5e45ea6c76f2b3272ff39d8fe67b13f5 (patch) | |
| tree | 32385a82110d012928536d7787b024add8818f63 /io_uring/net.c | |
| parent | 885fc8ac0a4dc70f5d87b80b0977292870e35c60 (diff) | |
| parent | 38f4885088fc5ad41b8b0a2a2cfc73d01e709e5c (diff) | |
Merge branch 'no-rebase-mnt_ns_tree_remove'
Bring in the fix for removing a mount namespace from the mount namespace
rbtree and list.
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'io_uring/net.c')
| -rw-r--r-- | io_uring/net.c | 27 | 
1 files changed, 15 insertions, 12 deletions
| diff --git a/io_uring/net.c b/io_uring/net.c index dd96e355982f..d69f2afa4f7a 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -494,6 +494,15 @@ static int io_bundle_nbufs(struct io_async_msghdr *kmsg, int ret)  	return nbufs;  } +static int io_net_kbuf_recyle(struct io_kiocb *req, +			      struct io_async_msghdr *kmsg, int len) +{ +	req->flags |= REQ_F_BL_NO_RECYCLE; +	if (req->flags & REQ_F_BUFFERS_COMMIT) +		io_kbuf_commit(req, req->buf_list, len, io_bundle_nbufs(kmsg, len)); +	return IOU_RETRY; +} +  static inline bool io_send_finish(struct io_kiocb *req, int *ret,  				  struct io_async_msghdr *kmsg,  				  unsigned issue_flags) @@ -562,8 +571,7 @@ int io_sendmsg(struct io_kiocb *req, unsigned int issue_flags)  			kmsg->msg.msg_controllen = 0;  			kmsg->msg.msg_control = NULL;  			sr->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return -EAGAIN; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; @@ -674,8 +682,7 @@ retry_bundle:  			sr->len -= ret;  			sr->buf += ret;  			sr->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return -EAGAIN; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; @@ -1071,8 +1078,7 @@ retry_multishot:  		}  		if (ret > 0 && io_net_retry(sock, flags)) {  			sr->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return IOU_RETRY; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; @@ -1218,8 +1224,7 @@ retry_multishot:  			sr->len -= ret;  			sr->buf += ret;  			sr->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return -EAGAIN; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; @@ -1500,8 +1505,7 @@ int io_send_zc(struct io_kiocb *req, unsigned int issue_flags)  			zc->len -= ret;  			zc->buf += ret;  			zc->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return -EAGAIN; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; @@ -1571,8 +1575,7 @@ int io_sendmsg_zc(struct io_kiocb *req, unsigned int issue_flags)  		if (ret > 0 && io_net_retry(sock, flags)) {  			sr->done_io += ret; -			req->flags |= REQ_F_BL_NO_RECYCLE; -			return -EAGAIN; +			return io_net_kbuf_recyle(req, kmsg, ret);  		}  		if (ret == -ERESTARTSYS)  			ret = -EINTR; | 
