xref: /OK3568_Linux_fs/buildroot/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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