Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

don't open-code kernel_setsockopt()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro e73a67f7 c1ae3cfa

+6 -32
+4 -21
fs/ocfs2/cluster/tcp.c
··· 1460 1460 1461 1461 static int o2net_set_nodelay(struct socket *sock) 1462 1462 { 1463 - int ret, val = 1; 1464 - mm_segment_t oldfs; 1463 + int val = 1; 1465 1464 1466 - oldfs = get_fs(); 1467 - set_fs(KERNEL_DS); 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; 1465 + return kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, 1466 + (void *)&val, sizeof(val)); 1484 1467 } 1485 1468 1486 1469 static int o2net_set_usertimeout(struct socket *sock) ··· 1471 1488 int user_timeout = O2NET_TCP_USER_TIMEOUT; 1472 1489 1473 1490 return kernel_setsockopt(sock, SOL_TCP, TCP_USER_TIMEOUT, 1474 - (char *)&user_timeout, sizeof(user_timeout)); 1491 + (void *)&user_timeout, sizeof(user_timeout)); 1475 1492 } 1476 1493 1477 1494 static void o2net_initialize_handshake(void)
+1 -4
net/rds/tcp.c
··· 84 84 /* doing it this way avoids calling tcp_sk() */ 85 85 void rds_tcp_nonagle(struct socket *sock) 86 86 { 87 - mm_segment_t oldfs = get_fs(); 88 87 int val = 1; 89 88 90 - set_fs(KERNEL_DS); 91 - sock->ops->setsockopt(sock, SOL_TCP, TCP_NODELAY, (char __user *)&val, 89 + kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (void *)&val, 92 90 sizeof(val)); 93 - set_fs(oldfs); 94 91 } 95 92 96 93 u32 rds_tcp_snd_nxt(struct rds_tcp_connection *tc)
+1 -7
net/rds/tcp_send.c
··· 40 40 41 41 static void rds_tcp_cork(struct socket *sock, int val) 42 42 { 43 - mm_segment_t oldfs; 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); 43 + kernel_setsockopt(sock, SOL_TCP, TCP_CORK, (void *)&val, sizeof(val)); 50 44 } 51 45 52 46 void rds_tcp_xmit_path_prepare(struct rds_conn_path *cp)