]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
don't open-code kernel_setsockopt()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 19 Mar 2017 01:20:27 +0000 (21:20 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 6 Apr 2017 06:09:23 +0000 (02:09 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ocfs2/cluster/tcp.c
net/rds/tcp.c
net/rds/tcp_send.c

index 4348027384f5edf06a66dd417214b9bbd3dd05cd..58fb1bc2bb3207c49739a57b3fe3662277d1dfc2 100644 (file)
@@ -1460,27 +1460,10 @@ static void o2net_rx_until_empty(struct work_struct *work)
 
 static int o2net_set_nodelay(struct socket *sock)
 {
-       int ret, val = 1;
-       mm_segment_t oldfs;
+       int val = 1;
 
-       oldfs = get_fs();
-       set_fs(KERNEL_DS);
-
-       /*
-        * Dear unsuspecting programmer,
-        *
-        * Don't use sock_setsockopt() for SOL_TCP.  It doesn't check its level
-        * argument and assumes SOL_SOCKET so, say, your TCP_NODELAY will
-        * silently turn into SO_DEBUG.
-        *
-        * Yours,
-        * Keeper of hilariously fragile interfaces.
-        */
-       ret = sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY,
-                                   (char __user *)&val, sizeof(val));
-
-       set_fs(oldfs);
-       return ret;
+       return kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY,
+                                   (void *)&val, sizeof(val));
 }
 
 static int o2net_set_usertimeout(struct socket *sock)
@@ -1488,7 +1471,7 @@ static int o2net_set_usertimeout(struct socket *sock)
        int user_timeout = O2NET_TCP_USER_TIMEOUT;
 
        return kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT,
-                               (char *)&user_timeout, sizeof(user_timeout));
+                               (void *)&user_timeout, sizeof(user_timeout));
 }
 
 static void o2net_initialize_handshake(void)
index a973d3b4dff0b2216bf3698cfbfeeb4b227dfc37..731282fbaf58fcb3875b91bf19e2c044f51894be 100644 (file)
@@ -84,13 +84,10 @@ static struct ctl_table rds_tcp_sysctl_table[] = {
 /* doing it this way avoids calling tcp_sk() */
 void rds_tcp_nonagle(struct socket *sock)
 {
-       mm_segment_t oldfs = get_fs();
        int val = 1;
 
-       set_fs(KERNEL_DS);
-       sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY, (char __user *)&val,
+       kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (void *)&val,
                              sizeof(val));
-       set_fs(oldfs);
 }
 
 u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc)
index dcf4742083eab360ded7fcaddad8608b2526aa29..52d11d7725c839820f76410c9837b762f2b2205e 100644 (file)
 
 static void rds_tcp_cork(struct socket *sock, int val)
 {
-       mm_segment_t oldfs;
-
-       oldfs = get_fs();
-       set_fs(KERNEL_DS);
-       sock->ops->setsockopt(sock, SOL_TCP, TCP_CORK, (char __user *)&val,
-                             sizeof(val));
-       set_fs(oldfs);
+       kernel_setsockopt(sock, SOL_TCP, TCP_CORK, (void *)&val, sizeof(val));
 }
 
 void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp)