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 = mdev->net_conf->try_connect_int * HZ;
|
||||||
timeo += (random32() & 1) ? timeo / 7 : -timeo / 7; /* 28.5% random jitter */
|
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_rcvtimeo = timeo;
|
||||||
s_listen->sk->sk_sndtimeo = timeo;
|
s_listen->sk->sk_sndtimeo = timeo;
|
||||||
drbd_setbufsize(s_listen, mdev->net_conf->sndbuf_size,
|
drbd_setbufsize(s_listen, mdev->net_conf->sndbuf_size,
|
||||||
|
@ -841,8 +841,8 @@ retry:
|
||||||
}
|
}
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
msock->sk->sk_reuse = 1; /* SO_REUSEADDR */
|
msock->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
|
||||||
sock->sk->sk_reuse = 1; /* SO_REUSEADDR */
|
sock->sk->sk_reuse = SK_CAN_REUSE; /* SO_REUSEADDR */
|
||||||
|
|
||||||
sock->sk->sk_allocation = GFP_NOIO;
|
sock->sk->sk_allocation = GFP_NOIO;
|
||||||
msock->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 */
|
/* setup Socket parameters */
|
||||||
sk = sock->sk;
|
sk = sock->sk;
|
||||||
sk->sk_reuse = 1;
|
sk->sk_reuse = SK_CAN_REUSE;
|
||||||
sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
|
sk->sk_sndtimeo = 15 * HZ; /* FIXME: make it configurable */
|
||||||
sk->sk_allocation = GFP_ATOMIC;
|
sk->sk_allocation = GFP_ATOMIC;
|
||||||
|
|
||||||
|
|
|
@ -2106,7 +2106,7 @@ static int r2net_open_listening_sock(__be32 addr, __be16 port)
|
||||||
r2net_listen_sock = sock;
|
r2net_listen_sock = sock;
|
||||||
INIT_WORK(&r2net_listen_work, r2net_accept_many);
|
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));
|
ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printk(KERN_ERR "ramster: Error %d while binding socket at "
|
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;
|
o2net_listen_sock = sock;
|
||||||
INIT_WORK(&o2net_listen_work, o2net_accept_many);
|
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));
|
ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printk(KERN_ERR "o2net: Error %d while binding socket at "
|
printk(KERN_ERR "o2net: Error %d while binding socket at "
|
||||||
|
|
|
@ -376,6 +376,17 @@ struct sock {
|
||||||
void (*sk_destruct)(struct sock *sk);
|
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)
|
static inline int sk_peek_offset(struct sock *sk, int flags)
|
||||||
{
|
{
|
||||||
if ((flags & MSG_PEEK) && (sk->sk_peek_off >= 0))
|
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);
|
sock_valbool_flag(sk, SOCK_DBG, valbool);
|
||||||
break;
|
break;
|
||||||
case SO_REUSEADDR:
|
case SO_REUSEADDR:
|
||||||
sk->sk_reuse = valbool;
|
sk->sk_reuse = (valbool ? SK_CAN_REUSE : SK_NO_REUSE);
|
||||||
break;
|
break;
|
||||||
case SO_TYPE:
|
case SO_TYPE:
|
||||||
case SO_PROTOCOL:
|
case SO_PROTOCOL:
|
||||||
|
|
|
@ -617,7 +617,7 @@ static int econet_create(struct net *net, struct socket *sock, int protocol,
|
||||||
if (sk == NULL)
|
if (sk == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
sk->sk_reuse = 1;
|
sk->sk_reuse = SK_CAN_REUSE;
|
||||||
sock->ops = &econet_ops;
|
sock->ops = &econet_ops;
|
||||||
sock_init_data(sock, sk);
|
sock_init_data(sock, sk);
|
||||||
|
|
||||||
|
@ -1012,7 +1012,7 @@ static int __init aun_udp_initialise(void)
|
||||||
return error;
|
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
|
udpsock->sk->sk_allocation = GFP_ATOMIC; /* we're going to call it
|
||||||
from interrupts */
|
from interrupts */
|
||||||
|
|
||||||
|
|
|
@ -350,7 +350,7 @@ lookup_protocol:
|
||||||
err = 0;
|
err = 0;
|
||||||
sk->sk_no_check = answer_no_check;
|
sk->sk_no_check = answer_no_check;
|
||||||
if (INET_PROTOSW_REUSE & answer_flags)
|
if (INET_PROTOSW_REUSE & answer_flags)
|
||||||
sk->sk_reuse = 1;
|
sk->sk_reuse = SK_CAN_REUSE;
|
||||||
|
|
||||||
inet = inet_sk(sk);
|
inet = inet_sk(sk);
|
||||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
||||||
|
|
|
@ -182,6 +182,9 @@ have_snum:
|
||||||
goto tb_not_found;
|
goto tb_not_found;
|
||||||
tb_found:
|
tb_found:
|
||||||
if (!hlist_empty(&tb->owners)) {
|
if (!hlist_empty(&tb->owners)) {
|
||||||
|
if (sk->sk_reuse == SK_FORCE_REUSE)
|
||||||
|
goto success;
|
||||||
|
|
||||||
if (tb->fastreuse > 0 &&
|
if (tb->fastreuse > 0 &&
|
||||||
sk->sk_reuse && sk->sk_state != TCP_LISTEN &&
|
sk->sk_reuse && sk->sk_state != TCP_LISTEN &&
|
||||||
smallest_size == -1) {
|
smallest_size == -1) {
|
||||||
|
|
|
@ -180,7 +180,7 @@ lookup_protocol:
|
||||||
err = 0;
|
err = 0;
|
||||||
sk->sk_no_check = answer_no_check;
|
sk->sk_no_check = answer_no_check;
|
||||||
if (INET_PROTOSW_REUSE & answer_flags)
|
if (INET_PROTOSW_REUSE & answer_flags)
|
||||||
sk->sk_reuse = 1;
|
sk->sk_reuse = SK_CAN_REUSE;
|
||||||
|
|
||||||
inet = inet_sk(sk);
|
inet = inet_sk(sk);
|
||||||
inet->is_icsk = (INET_PROTOSW_ICSK & answer_flags) != 0;
|
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);
|
sk_change_net(sock->sk, net);
|
||||||
/* it is equivalent to the REUSEADDR option in user-space */
|
/* 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,
|
result = sock->ops->bind(sock, (struct sockaddr *) &mcast_addr,
|
||||||
sizeof(struct sockaddr));
|
sizeof(struct sockaddr));
|
||||||
|
|
|
@ -145,7 +145,7 @@ int rds_tcp_listen_init(void)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
sock->sk->sk_reuse = 1;
|
sock->sk->sk_reuse = SK_CAN_REUSE;
|
||||||
rds_tcp_nonagle(sock);
|
rds_tcp_nonagle(sock);
|
||||||
|
|
||||||
write_lock_bh(&sock->sk->sk_callback_lock);
|
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));
|
(char *)&val, sizeof(val));
|
||||||
|
|
||||||
if (type == SOCK_STREAM)
|
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);
|
error = kernel_bind(sock, sin, len);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
goto bummer;
|
goto bummer;
|
||||||
|
|
Loading…
Reference in New Issue