123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- From be288b60278c78eccfd347aacf4d3dd8771215a9 Mon Sep 17 00:00:00 2001
- From: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
- Date: Tue, 12 Jan 2016 14:01:42 +0100
- Subject: [PATCH] Port one/one_udp.c to Linux 4.1
- Kernel commit c0371da6047a replaced msg_iov and msg_iovlen with msg_iter
- in struct msghdr since 3.19
- one/one_udp.c: In function 'ksocket_send_iov':
- one/one_udp.c:186:9: error: 'struct msghdr' has no member named 'msg_iov'
- one/one_udp.c:187:9: error: 'struct msghdr' has no member named 'msg_iovlen'
- one/one_udp.c: In function 'ksocket_receive':
- one/one_udp.c:221:9: error: 'struct msghdr' has no member named 'msg_iov'
- one/one_udp.c:222:9: error: 'struct msghdr' has no member named 'msg_iovlen'
- The iov_iter interface
- https://lwn.net/Articles/625077/
- Kernel commit d8725c86aeba dropped the len parameter in sock_sendmsg
- since 4.1
- one/one_udp.c: In function 'ksocket_send_iov':
- one/one_udp.c:192:13: error: too many arguments to function 'sock_sendmsg'
- Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
- ---
- one/one_udp.c | 30 +++++++++++++++---------------
- 1 file changed, 15 insertions(+), 15 deletions(-)
- diff --git a/one/one_udp.c b/one/one_udp.c
- index 26b9e6a1f729..b1daae164cdf 100644
- --- a/one/one_udp.c
- +++ b/one/one_udp.c
- @@ -161,7 +161,7 @@ ksocket_send_iov( struct socket *sock,
- const struct iovec *iov,
- size_t iov_count )
- {
- - struct msghdr msg;
- + struct msghdr msg = { addr, sizeof *addr };
- mm_segment_t oldfs;
- int size = 0;
- size_t len = 0;
- @@ -178,18 +178,20 @@ ksocket_send_iov( struct socket *sock,
- for (i=0; i<iov_count; i++)
- len += iov[i].iov_len;
-
- - msg.msg_flags = 0;
- - msg.msg_name = addr;
- - msg.msg_namelen = sizeof(struct sockaddr_in);
- - msg.msg_control = NULL;
- - msg.msg_controllen = 0;
- +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) // commit c0371da6047a
- msg.msg_iov = (struct iovec*) iov;
- msg.msg_iovlen = iov_count;
- - msg.msg_control = NULL;
- +#else
- + iov_iter_init(&msg.msg_iter, WRITE, iov, iov_count, len);
- +#endif
-
- oldfs = get_fs();
- set_fs(KERNEL_DS);
- - size = sock_sendmsg(sock,&msg,len);
- +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) // commit d8725c86aeba
- + size = sock_sendmsg(sock, &msg, len);
- +#else
- + size = sock_sendmsg(sock, &msg);
- +#endif
- set_fs(oldfs);
-
- return size;
- @@ -198,7 +200,7 @@ ksocket_send_iov( struct socket *sock,
- static int
- ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int len)
- {
- - struct msghdr msg;
- + struct msghdr msg = { addr, sizeof *addr };
- struct iovec iov;
- mm_segment_t oldfs;
- int size = 0;
- @@ -213,14 +215,12 @@ ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int le
- iov.iov_base = buf;
- iov.iov_len = len;
-
- - msg.msg_flags = 0;
- - msg.msg_name = addr;
- - msg.msg_namelen = sizeof(struct sockaddr_in);
- - msg.msg_control = NULL;
- - msg.msg_controllen = 0;
- +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) // commit c0371da6047a
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
- - msg.msg_control = NULL;
- +#else
- + iov_iter_init(&msg.msg_iter, READ, &iov, 1, len);
- +#endif
-
- oldfs = get_fs();
- set_fs(KERNEL_DS);
|