diff options
Diffstat (limited to 'io_uring/net.c')
| -rw-r--r-- | io_uring/net.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/io_uring/net.c b/io_uring/net.c index 594490a1389b..d08abcca89cc 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -601,17 +601,18 @@ retry_bundle:  			.iovs = &kmsg->fast_iov,  			.max_len = INT_MAX,  			.nr_iovs = 1, -			.mode = KBUF_MODE_EXPAND,  		};  		if (kmsg->free_iov) {  			arg.nr_iovs = kmsg->free_iov_nr;  			arg.iovs = kmsg->free_iov; -			arg.mode |= KBUF_MODE_FREE; +			arg.mode = KBUF_MODE_FREE;  		}  		if (!(sr->flags & IORING_RECVSEND_BUNDLE))  			arg.nr_iovs = 1; +		else +			arg.mode |= KBUF_MODE_EXPAND;  		ret = io_buffers_select(req, &arg, issue_flags);  		if (unlikely(ret < 0)) @@ -623,6 +624,7 @@ retry_bundle:  		if (arg.iovs != &kmsg->fast_iov && arg.iovs != kmsg->free_iov) {  			kmsg->free_iov_nr = ret;  			kmsg->free_iov = arg.iovs; +			req->flags |= REQ_F_NEED_CLEANUP;  		}  	} @@ -1094,6 +1096,7 @@ static int io_recv_buf_select(struct io_kiocb *req, struct io_async_msghdr *kmsg  		if (arg.iovs != &kmsg->fast_iov && arg.iovs != kmsg->free_iov) {  			kmsg->free_iov_nr = ret;  			kmsg->free_iov = arg.iovs; +			req->flags |= REQ_F_NEED_CLEANUP;  		}  	} else {  		void __user *buf; |