switch tcp_sock->ucopy from iovec (ucopy.iov) to msghdr (ucopy.msg)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
f69e6d131f
Коммит
f4362a2c95
|
@ -162,7 +162,7 @@ struct tcp_sock {
|
|||
struct {
|
||||
struct sk_buff_head prequeue;
|
||||
struct task_struct *task;
|
||||
struct iovec *iov;
|
||||
struct msghdr *msg;
|
||||
int memory;
|
||||
int len;
|
||||
} ucopy;
|
||||
|
|
|
@ -1729,7 +1729,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
|||
if (!user_recv && !(flags & (MSG_TRUNC | MSG_PEEK))) {
|
||||
user_recv = current;
|
||||
tp->ucopy.task = user_recv;
|
||||
tp->ucopy.iov = msg->msg_iov;
|
||||
tp->ucopy.msg = msg;
|
||||
}
|
||||
|
||||
tp->ucopy.len = len;
|
||||
|
|
|
@ -4421,7 +4421,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
|
|||
__set_current_state(TASK_RUNNING);
|
||||
|
||||
local_bh_enable();
|
||||
if (!skb_copy_datagram_iovec(skb, 0, tp->ucopy.iov, chunk)) {
|
||||
if (!skb_copy_datagram_msg(skb, 0, tp->ucopy.msg, chunk)) {
|
||||
tp->ucopy.len -= chunk;
|
||||
tp->copied_seq += chunk;
|
||||
eaten = (chunk == skb->len);
|
||||
|
@ -4941,10 +4941,9 @@ static int tcp_copy_to_iovec(struct sock *sk, struct sk_buff *skb, int hlen)
|
|||
|
||||
local_bh_enable();
|
||||
if (skb_csum_unnecessary(skb))
|
||||
err = skb_copy_datagram_iovec(skb, hlen, tp->ucopy.iov, chunk);
|
||||
err = skb_copy_datagram_msg(skb, hlen, tp->ucopy.msg, chunk);
|
||||
else
|
||||
err = skb_copy_and_csum_datagram_iovec(skb, hlen,
|
||||
tp->ucopy.iov);
|
||||
err = skb_copy_and_csum_datagram_msg(skb, hlen, tp->ucopy.msg);
|
||||
|
||||
if (!err) {
|
||||
tp->ucopy.len -= chunk;
|
||||
|
|
Загрузка…
Ссылка в новой задаче