aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-03-18 21:20:27 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2017-04-06 02:09:23 -0400
commite73a67f7cd471a14bb1351954609e0b0ef5d2187 (patch)
treeb5b8de7536d6ce142390889b2e8dd6f7936dcf55
parentc1ae3cfa0e89fa1a7ecc4c99031f5e9ae99d9201 (diff)
don't open-code kernel_setsockopt()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/ocfs2/cluster/tcp.c25
-rw-r--r--net/rds/tcp.c5
-rw-r--r--net/rds/tcp_send.c8
3 files changed, 6 insertions, 32 deletions
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index 4348027384f5..58fb1bc2bb32 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -1460,27 +1460,10 @@ static void o2net_rx_until_empty(struct work_struct *work)
1460 1460
1461static int o2net_set_nodelay(struct socket *sock) 1461static int o2net_set_nodelay(struct socket *sock)
1462{ 1462{
1463 int ret, val = 1; 1463 int val = 1;
1464 mm_segment_t oldfs;
1465 1464
1466 oldfs = get_fs(); 1465 return kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY,
1467 set_fs(KERNEL_DS); 1466 (void *)&val, sizeof(val));
1468
1469 /*
1470 * Dear unsuspecting programmer,
1471 *
1472 * Don't use sock_setsockopt() for SOL_TCP. It doesn't check its level
1473 * argument and assumes SOL_SOCKET so, say, your TCP_NODELAY will
1474 * silently turn into SO_DEBUG.
1475 *
1476 * Yours,
1477 * Keeper of hilariously fragile interfaces.
1478 */
1479 ret = sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY,
1480 (char __user *)&val, sizeof(val));
1481
1482 set_fs(oldfs);
1483 return ret;
1484} 1467}
1485 1468
1486static int o2net_set_usertimeout(struct socket *sock) 1469static int o2net_set_usertimeout(struct socket *sock)
@@ -1488,7 +1471,7 @@ static int o2net_set_usertimeout(struct socket *sock)
1488 int user_timeout = O2NET_TCP_USER_TIMEOUT; 1471 int user_timeout = O2NET_TCP_USER_TIMEOUT;
1489 1472
1490 return kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT, 1473 return kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT,
1491 (char *)&user_timeout, sizeof(user_timeout)); 1474 (void *)&user_timeout, sizeof(user_timeout));
1492} 1475}
1493 1476
1494static void o2net_initialize_handshake(void) 1477static void o2net_initialize_handshake(void)
diff --git a/net/rds/tcp.c b/net/rds/tcp.c
index a973d3b4dff0..731282fbaf58 100644
--- a/net/rds/tcp.c
+++ b/net/rds/tcp.c
@@ -84,13 +84,10 @@ static struct ctl_table rds_tcp_sysctl_table[] = {
84/* doing it this way avoids calling tcp_sk() */ 84/* doing it this way avoids calling tcp_sk() */
85void rds_tcp_nonagle(struct socket *sock) 85void rds_tcp_nonagle(struct socket *sock)
86{ 86{
87 mm_segment_t oldfs = get_fs();
88 int val = 1; 87 int val = 1;
89 88
90 set_fs(KERNEL_DS); 89 kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (void *)&val,
91 sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY, (char __user *)&val,
92 sizeof(val)); 90 sizeof(val));
93 set_fs(oldfs);
94} 91}
95 92
96u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc) 93u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc)
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c
index dcf4742083ea..52d11d7725c8 100644
--- a/net/rds/tcp_send.c
+++ b/net/rds/tcp_send.c
@@ -40,13 +40,7 @@
40 40
41static void rds_tcp_cork(struct socket *sock, int val) 41static void rds_tcp_cork(struct socket *sock, int val)
42{ 42{
43 mm_segment_t oldfs; 43 kernel_setsockopt(sock, SOL_TCP, TCP_CORK, (void *)&val, sizeof(val));
44
45 oldfs = get_fs();
46 set_fs(KERNEL_DS);
47 sock->ops->setsockopt(sock, SOL_TCP, TCP_CORK, (char __user *)&val,
48 sizeof(val));
49 set_fs(oldfs);
50} 44}
51 45
52void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp) 46void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp)