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