1From be288b60278c78eccfd347aacf4d3dd8771215a9 Mon Sep 17 00:00:00 2001 2From: Marc Gonzalez <marc_gonzalez@sigmadesigns.com> 3Date: Tue, 12 Jan 2016 14:01:42 +0100 4Subject: [PATCH] Port one/one_udp.c to Linux 4.1 5 6Kernel commit c0371da6047a replaced msg_iov and msg_iovlen with msg_iter 7in struct msghdr since 3.19 8 9one/one_udp.c: In function 'ksocket_send_iov': 10one/one_udp.c:186:9: error: 'struct msghdr' has no member named 'msg_iov' 11one/one_udp.c:187:9: error: 'struct msghdr' has no member named 'msg_iovlen' 12 13one/one_udp.c: In function 'ksocket_receive': 14one/one_udp.c:221:9: error: 'struct msghdr' has no member named 'msg_iov' 15one/one_udp.c:222:9: error: 'struct msghdr' has no member named 'msg_iovlen' 16 17The iov_iter interface 18https://lwn.net/Articles/625077/ 19 20Kernel commit d8725c86aeba dropped the len parameter in sock_sendmsg 21since 4.1 22 23one/one_udp.c: In function 'ksocket_send_iov': 24one/one_udp.c:192:13: error: too many arguments to function 'sock_sendmsg' 25 26Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com> 27 28Kernel commit 2da62906b1e29 dropped the size parameter in sock_recvmsg 29since 4.7 30 31In function 'ksocket_receive' 32one/one_udp.c:235:13: error: too many arguments to function 'sock_recvmsg' 33 34Signed-off-by: Matthew Shyu <matthew.shyu@amlogic.com> 35--- 36 one/one_udp.c | 34 +++++++++++++++++++--------------- 37 1 file changed, 19 insertions(+), 15 deletions(-) 38 39diff --git a/one/one_udp.c b/one/one_udp.c 40index 26b9e6a..9b59529 100644 41--- a/one/one_udp.c 42+++ b/one/one_udp.c 43@@ -161,7 +161,7 @@ ksocket_send_iov( struct socket *sock, 44 const struct iovec *iov, 45 size_t iov_count ) 46 { 47- struct msghdr msg; 48+ struct msghdr msg = { addr, sizeof *addr }; 49 mm_segment_t oldfs; 50 int size = 0; 51 size_t len = 0; 52@@ -178,18 +178,20 @@ ksocket_send_iov( struct socket *sock, 53 for (i=0; i<iov_count; i++) 54 len += iov[i].iov_len; 55 56- msg.msg_flags = 0; 57- msg.msg_name = addr; 58- msg.msg_namelen = sizeof(struct sockaddr_in); 59- msg.msg_control = NULL; 60- msg.msg_controllen = 0; 61+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) // commit c0371da6047a 62 msg.msg_iov = (struct iovec*) iov; 63 msg.msg_iovlen = iov_count; 64- msg.msg_control = NULL; 65+#else 66+ iov_iter_init(&msg.msg_iter, WRITE, iov, iov_count, len); 67+#endif 68 69 oldfs = get_fs(); 70 set_fs(KERNEL_DS); 71- size = sock_sendmsg(sock,&msg,len); 72+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) // commit d8725c86aeba 73+ size = sock_sendmsg(sock, &msg, len); 74+#else 75+ size = sock_sendmsg(sock, &msg); 76+#endif 77 set_fs(oldfs); 78 79 return size; 80@@ -198,7 +200,7 @@ ksocket_send_iov( struct socket *sock, 81 static int 82 ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int len) 83 { 84- struct msghdr msg; 85+ struct msghdr msg = { addr, sizeof *addr }; 86 struct iovec iov; 87 mm_segment_t oldfs; 88 int size = 0; 89@@ -213,18 +215,20 @@ ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int le 90 iov.iov_base = buf; 91 iov.iov_len = len; 92 93- msg.msg_flags = 0; 94- msg.msg_name = addr; 95- msg.msg_namelen = sizeof(struct sockaddr_in); 96- msg.msg_control = NULL; 97- msg.msg_controllen = 0; 98+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0) // commit c0371da6047a 99 msg.msg_iov = &iov; 100 msg.msg_iovlen = 1; 101- msg.msg_control = NULL; 102+#else 103+ iov_iter_init(&msg.msg_iter, READ, &iov, 1, len); 104+#endif 105 106 oldfs = get_fs(); 107 set_fs(KERNEL_DS); 108+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0) // commit 2da62906b1e29 109 size = sock_recvmsg(sock,&msg,len,msg.msg_flags); 110+#else 111+ size = sock_recvmsg(sock, &msg,msg.msg_flags); 112+#endif 113 set_fs(oldfs); 114 115 return size; 116-- 1172.11.0 118 119