0004-Port-one-one_udp.c-to-Linux-4.1.patch 3.3 KB

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