mirror of https://gitee.com/openkylin/linux.git
sock: Introduce named constants for sk_reuse
Name them in a "backward compatible" manner, i.e. reuse or not are still 1 and 0 respectively. The reuse value of 2 means that the socket with it will forcibly reuse everyone else's port. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
59c55bdde8
commit
4a17fd5229
|
@ -664,7 +664,7 @@ static struct socket *drbd_wait_for_connect(struct drbd_conf *mdev)
|
|||
timeo = mdev->net_conf->try_connect_int * HZ;
|
||||
timeo += (random32() & 1) ? timeo / 7 : -timeo / 7; /* 28.5% random jitter */
|
||||
|
||||
s_listen->sk->sk_reuse = 1; /* SO_REUSEADDR */
|
||||
s_listen->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
|
||||
s_listen->sk->sk_rcvtimeo = timeo;
|
||||
s_listen->sk->sk_sndtimeo = timeo;
|
||||
drbd_setbufsize(s_listen, mdev->net_conf->sndbuf_size,
|
||||
|
@ -841,8 +841,8 @@ static int drbd_connect(struct drbd_conf *mdev)
|
|||
}
|
||||
} while (1);
|
||||
|
||||
msock->sk->sk_reuse = 1; /* SO_REUSEADDR */
|
||||
sock->sk->sk_reuse = 1; /* SO_REUSEADDR */
|
||||
msock->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
|
||||
|
||||
sock->sk->sk_allocation = GFP_NOIO;
|
||||
msock->sk->sk_allocation = GFP_NOIO;
|
||||
|
|
|
@ -662,7 +662,7 @@ iscsi_sw_tcp_conn_bind(struct iscsi_cls_session *cls_session,
|
|||
|
||||
/* setup Socket parameters */
|
||||
sk = sock->sk;
|
||||
sk->sk_reuse = 1;
|
||||
sk->sk_reuse = SK_CAN_REUSE;
|
||||
sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
|
||||
sk->sk_allocation = GFP_ATOMIC;
|
||||
|
||||
|
|
|
@ -2106,7 +2106,7 @@ static int r2net_open_listening_sock(__be32 addr, __be16 port)
|
|||
r2net_listen_sock = sock;
|
||||
INIT_WORK(&r2net_listen_work, r2net_accept_many);
|
||||
|
||||
sock->sk->sk_reuse = 1;
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE;
|
||||
ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "ramster: Error %d while binding socket at "
|
||||
|
|
|
@ -2005,7 +2005,7 @@ static int o2net_open_listening_sock(__be32 addr, __be16 port)
|
|||
o2net_listen_sock = sock;
|
||||
INIT_WORK(&o2net_listen_work, o2net_accept_many);
|
||||
|
||||
sock->sk->sk_reuse = 1;
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE;
|
||||
ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
|
||||
if (ret < 0) {
|
||||
printk(KERN_ERR "o2net: Error %d while binding socket at "
|
||||
|
|
|
@ -376,6 +376,17 @@ struct sock {
|
|||
void (*sk_destruct)(struct sock *sk);
|
||||
};
|
||||
|
||||
/*
|
||||
* SK_CAN_REUSE and SK_NO_REUSE on a socket mean that the socket is OK
|
||||
* or not whether his port will be reused by someone else. SK_FORCE_REUSE
|
||||
* on a socket means that the socket will reuse everybody else's port
|
||||
* without looking at the other's sk_reuse value.
|
||||
*/
|
||||
|
||||
#define SK_NO_REUSE 0
|
||||
#define SK_CAN_REUSE 1
|
||||
#define SK_FORCE_REUSE 2
|
||||
|
||||
static inline int sk_peek_offset(struct sock *sk, int flags)
|
||||
{
|
||||
if ((flags & MSG_PEEK) && (sk->sk_peek_off >= 0))
|
||||
|
|
|
@ -561,7 +561,7 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
|
|||
sock_valbool_flag(sk, SOCK_DBG, valbool);
|
||||
break;
|
||||
case SO_REUSEADDR:
|
||||
sk->sk_reuse = valbool;
|
||||
sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
|
||||
break;
|
||||
case SO_TYPE:
|
||||
case SO_PROTOCOL:
|
||||
|
|
|
@ -617,7 +617,7 @@ static int econet_create(struct net *net, struct socket *sock, int protocol,
|
|||
if (sk == NULL)
|
||||
goto out;
|
||||
|
||||
sk->sk_reuse = 1;
|
||||
sk->sk_reuse = SK_CAN_REUSE;
|
||||
sock->ops = &econet_ops;
|
||||
sock_init_data(sock, sk);
|
||||
|
||||
|
@ -1012,7 +1012,7 @@ static int __init aun_udp_initialise(void)
|
|||
return error;
|
||||
}
|
||||
|
||||
udpsock->sk->sk_reuse = 1;
|
||||
udpsock->sk->sk_reuse = SK_CAN_REUSE;
|
||||
udpsock->sk->sk_allocation = GFP_ATOMIC; /* we're going to call it
|
||||
from interrupts */
|
||||
|
||||
|
|
|
@ -350,7 +350,7 @@ static int inet_create(struct net *net, struct socket *sock, int protocol,
|
|||
err = 0;
|
||||
sk->sk_no_check = answer_no_check;
|
||||
if (INET_PROTOSW_REUSE & answer_flags)
|
||||
sk->sk_reuse = 1;
|
||||
sk->sk_reuse = SK_CAN_REUSE;
|
||||
|
||||
inet = inet_sk(sk);
|
||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||
|
|
|
@ -182,6 +182,9 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum)
|
|||
goto tb_not_found;
|
||||
tb_found:
|
||||
if (!hlist_empty(&tb->owners)) {
|
||||
if (sk->sk_reuse == SK_FORCE_REUSE)
|
||||
goto success;
|
||||
|
||||
if (tb->fastreuse > 0 &&
|
||||
sk->sk_reuse && sk->sk_state != TCP_LISTEN &&
|
||||
smallest_size == -1) {
|
||||
|
|
|
@ -180,7 +180,7 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol,
|
|||
err = 0;
|
||||
sk->sk_no_check = answer_no_check;
|
||||
if (INET_PROTOSW_REUSE & answer_flags)
|
||||
sk->sk_reuse = 1;
|
||||
sk->sk_reuse = SK_CAN_REUSE;
|
||||
|
||||
inet = inet_sk(sk);
|
||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||
|
|
|
@ -1368,7 +1368,7 @@ static struct socket *make_receive_sock(struct net *net)
|
|||
*/
|
||||
sk_change_net(sock->sk, net);
|
||||
/* it is equivalent to the REUSEADDR option in user-space */
|
||||
sock->sk->sk_reuse = 1;
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE;
|
||||
|
||||
result = sock->ops->bind(sock, (struct sockaddr *) &mcast_addr,
|
||||
sizeof(struct sockaddr));
|
||||
|
|
|
@ -145,7 +145,7 @@ int rds_tcp_listen_init(void)
|
|||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
sock->sk->sk_reuse = 1;
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE;
|
||||
rds_tcp_nonagle(sock);
|
||||
|
||||
write_lock_bh(&sock->sk->sk_callback_lock);
|
||||
|
|
|
@ -1556,7 +1556,7 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
|
|||
(char *)&val, sizeof(val));
|
||||
|
||||
if (type == SOCK_STREAM)
|
||||
sock->sk->sk_reuse = 1; /* allow address reuse */
|
||||
sock->sk->sk_reuse = SK_CAN_REUSE; /* allow address reuse */
|
||||
error = kernel_bind(sock, sin, len);
|
||||
if (error < 0)
|
||||
goto bummer;
|
||||
|
|
Loading…
Reference in New Issue