[PATCH 05/28] lnet: improve compat code for IPV6_V6ONLY sock opt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Mr NeilBrown <neilb@xxxxxxx>

Since linux 5.9 (v5.8-rc4-1952-ga7b75c5a8c41) it has been
possible to pass a "sockptr" to ->setsockopt() which can provide
a kernel address.

WC-bug-id: https://jira.whamcloud.com/browse/LU-14195
Lustre-commit: 6d111ff0dde182bfb ("LU-14195 lnet: improve compat code for IPV6_V6ONLY sock opt")
Signed-off-by: Mr NeilBrown <neilb@xxxxxxx>
Reviewed-on: https://review.whamcloud.com/43559
Reviewed-by: James Simmons <jsimmons@xxxxxxxxxxxxx>
Reviewed-by: Arshad Hussain <arshad.hussain@xxxxxxxxxxxxxxxxx>
Reviewed-by: Chris Horn <chris.horn@xxxxxxx>
Reviewed-by: Oleg Drokin <green@xxxxxxxxxxxxx>
Signed-off-by: James Simmons <jsimmons@xxxxxxxxxxxxx>
---
 net/lnet/lnet/lib-socket.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/net/lnet/lnet/lib-socket.c b/net/lnet/lnet/lib-socket.c
index 7bb8d5c..3a99cb6 100644
--- a/net/lnet/lnet/lib-socket.c
+++ b/net/lnet/lnet/lib-socket.c
@@ -237,18 +237,12 @@ int choose_ipv4_src(u32 *ret, int interface, u32 dst_ipaddr, struct net *ns)
 			 * This is the default, but it can be overridden so we
 			 * force it back.
 			 */
-			/* From v5.7-rc6-2614-g5a892ff2facb when
-			 * kernel_setsockopt() was removed until
-			 * sockptr_t (above) there is no clean way to
-			 * pass kernel address to setsockopt.  We could
-			 * use get_fs()/set_fs(), but in this particular
-			 * situation there is an easier way.  It depends
-			 * on the fact that at least for these few
-			 * kernels a NULL address to ipv6_setsockopt()
-			 * is treated like the address of a zero.
+			/* sockptr_t was introduced around
+			 * v5.8-rc4-1952-ga7b75c5a8c41 and allows a
+			 * kernel address to be passed to ->setsockopt
 			 */
-			if (ipv6_only_sock(sock->sk) && !val) {
-				void *optval = NULL;
+			if (ipv6_only_sock(sock->sk)) {
+				sockptr_t optval = KERNEL_SOCKPTR(&val);
 
 				sock->ops->setsockopt(sock,
 						      IPPROTO_IPV6, IPV6_V6ONLY,
-- 
1.8.3.1




[Index of Archives]     [linux Cryptography]     [Asterisk App Development]     [PJ SIP]     [Gnu Gatekeeper]     [IETF Sipping]     [Info Cyrus]     [ALSA User]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite News]     [Deep Creek Hot Springs]     [Yosemite Campsites]     [ISDN Cause Codes]

  Powered by Linux