X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv4%2Fipvs%2Fip_vs_sync.c;h=e7f3f28a70a50b5106fcab8b9b26439e9477a174;hb=90ad8654ffeb336af8c878fdf7bc72e2ac72467a;hp=80fdab71e20cf45668fee59659dc50d1018a2888;hpb=a91482bdcc2e0f6035702e46f1b99043a0893346;p=linux-2.6.git diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c index 80fdab71e..e7f3f28a7 100644 --- a/net/ipv4/ipvs/ip_vs_sync.c +++ b/net/ipv4/ipvs/ip_vs_sync.c @@ -555,15 +555,25 @@ static struct socket * make_receive_sock(void) static int ip_vs_send_async(struct socket *sock, const char *buffer, const size_t length) { - struct msghdr msg = {.msg_flags = MSG_DONTWAIT|MSG_NOSIGNAL}; - struct kvec iov; + struct msghdr msg; + mm_segment_t oldfs; + struct iovec iov; int len; EnterFunction(7); iov.iov_base = (void *)buffer; iov.iov_len = length; - - len = kernel_sendmsg(sock, &msg, &iov, 1, (size_t)(length)); + msg.msg_name = 0; + msg.msg_namelen = 0; + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = MSG_DONTWAIT|MSG_NOSIGNAL; + + oldfs = get_fs(); set_fs(KERNEL_DS); + len = sock_sendmsg(sock, &msg, (size_t)(length)); + set_fs(oldfs); LeaveFunction(7); return len; @@ -573,17 +583,27 @@ ip_vs_send_async(struct socket *sock, const char *buffer, const size_t length) static int ip_vs_receive(struct socket *sock, char *buffer, const size_t buflen) { - struct msghdr msg = {NULL,}; - struct kvec iov; + struct msghdr msg; + struct iovec iov; int len; + mm_segment_t oldfs; EnterFunction(7); /* Receive a packet */ iov.iov_base = buffer; iov.iov_len = (size_t)buflen; - - len = kernel_recvmsg(sock, &msg, &iov, 1, buflen, 0); + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = NULL; + msg.msg_controllen = 0; + msg.msg_flags = 0; + + oldfs = get_fs(); set_fs(KERNEL_DS); + len = sock_recvmsg(sock, &msg, buflen, 0); + set_fs(oldfs); if (len < 0) return -1;