|
@@ -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)
|