Loading net/sunrpc/xprtsock.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -50,6 +50,7 @@ unsigned int xprt_min_resvport = RPC_DEF_MIN_RESVPORT; unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT; unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT; #define XS_TCP_LINGER_TO (15U * HZ) #define XS_TCP_LINGER_TO (15U * HZ) static unsigned int xs_tcp_fin_timeout __read_mostly = XS_TCP_LINGER_TO; /* /* * We can register our own files under /proc/sys/sunrpc by * We can register our own files under /proc/sys/sunrpc by Loading Loading @@ -118,6 +119,14 @@ static ctl_table xs_tunables_table[] = { .extra1 = &xprt_min_resvport_limit, .extra1 = &xprt_min_resvport_limit, .extra2 = &xprt_max_resvport_limit .extra2 = &xprt_max_resvport_limit }, }, { .procname = "tcp_fin_timeout", .data = &xs_tcp_fin_timeout, .maxlen = sizeof(xs_tcp_fin_timeout), .mode = 0644, .proc_handler = &proc_dointvec_jiffies, .strategy = sysctl_jiffies }, { { .ctl_name = 0, .ctl_name = 0, }, }, Loading Loading @@ -1222,7 +1231,7 @@ static void xs_tcp_state_change(struct sock *sk) clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); smp_mb__after_clear_bit(); smp_mb__after_clear_bit(); xs_tcp_schedule_linger_timeout(xprt, XS_TCP_LINGER_TO); xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout); break; break; case TCP_CLOSE_WAIT: case TCP_CLOSE_WAIT: /* The server initiated a shutdown of the socket */ /* The server initiated a shutdown of the socket */ Loading @@ -1239,7 +1248,7 @@ static void xs_tcp_state_change(struct sock *sk) break; break; case TCP_LAST_ACK: case TCP_LAST_ACK: set_bit(XPRT_CLOSING, &xprt->state); set_bit(XPRT_CLOSING, &xprt->state); xs_tcp_schedule_linger_timeout(xprt, XS_TCP_LINGER_TO); xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout); smp_mb__before_clear_bit(); smp_mb__before_clear_bit(); clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CONNECTED, &xprt->state); smp_mb__after_clear_bit(); smp_mb__after_clear_bit(); Loading Loading
net/sunrpc/xprtsock.c +11 −2 Original line number Original line Diff line number Diff line Loading @@ -50,6 +50,7 @@ unsigned int xprt_min_resvport = RPC_DEF_MIN_RESVPORT; unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT; unsigned int xprt_max_resvport = RPC_DEF_MAX_RESVPORT; #define XS_TCP_LINGER_TO (15U * HZ) #define XS_TCP_LINGER_TO (15U * HZ) static unsigned int xs_tcp_fin_timeout __read_mostly = XS_TCP_LINGER_TO; /* /* * We can register our own files under /proc/sys/sunrpc by * We can register our own files under /proc/sys/sunrpc by Loading Loading @@ -118,6 +119,14 @@ static ctl_table xs_tunables_table[] = { .extra1 = &xprt_min_resvport_limit, .extra1 = &xprt_min_resvport_limit, .extra2 = &xprt_max_resvport_limit .extra2 = &xprt_max_resvport_limit }, }, { .procname = "tcp_fin_timeout", .data = &xs_tcp_fin_timeout, .maxlen = sizeof(xs_tcp_fin_timeout), .mode = 0644, .proc_handler = &proc_dointvec_jiffies, .strategy = sysctl_jiffies }, { { .ctl_name = 0, .ctl_name = 0, }, }, Loading Loading @@ -1222,7 +1231,7 @@ static void xs_tcp_state_change(struct sock *sk) clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); clear_bit(XPRT_CLOSE_WAIT, &xprt->state); smp_mb__after_clear_bit(); smp_mb__after_clear_bit(); xs_tcp_schedule_linger_timeout(xprt, XS_TCP_LINGER_TO); xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout); break; break; case TCP_CLOSE_WAIT: case TCP_CLOSE_WAIT: /* The server initiated a shutdown of the socket */ /* The server initiated a shutdown of the socket */ Loading @@ -1239,7 +1248,7 @@ static void xs_tcp_state_change(struct sock *sk) break; break; case TCP_LAST_ACK: case TCP_LAST_ACK: set_bit(XPRT_CLOSING, &xprt->state); set_bit(XPRT_CLOSING, &xprt->state); xs_tcp_schedule_linger_timeout(xprt, XS_TCP_LINGER_TO); xs_tcp_schedule_linger_timeout(xprt, xs_tcp_fin_timeout); smp_mb__before_clear_bit(); smp_mb__before_clear_bit(); clear_bit(XPRT_CONNECTED, &xprt->state); clear_bit(XPRT_CONNECTED, &xprt->state); smp_mb__after_clear_bit(); smp_mb__after_clear_bit(); Loading