Blame view

buildroot/buildroot-2016.08.1/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch 3.26 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  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);