[DECNET]: add memory buffer settings
The patch (originally from Steve) simply adds memory buffer settings to DECnet similar to those in TCP. Signed-off-by: Patrick Caulfield <patrick@tykepenguin.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
dab9630fb3
commit
1f12bcc9d1
@@ -670,6 +670,9 @@ enum {
|
|||||||
NET_DECNET_DST_GC_INTERVAL = 9,
|
NET_DECNET_DST_GC_INTERVAL = 9,
|
||||||
NET_DECNET_CONF = 10,
|
NET_DECNET_CONF = 10,
|
||||||
NET_DECNET_NO_FC_MAX_CWND = 11,
|
NET_DECNET_NO_FC_MAX_CWND = 11,
|
||||||
|
NET_DECNET_MEM = 12,
|
||||||
|
NET_DECNET_RMEM = 13,
|
||||||
|
NET_DECNET_WMEM = 14,
|
||||||
NET_DECNET_DEBUG_LEVEL = 255
|
NET_DECNET_DEBUG_LEVEL = 255
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -234,4 +234,8 @@ extern int decnet_di_count;
|
|||||||
extern int decnet_dr_count;
|
extern int decnet_dr_count;
|
||||||
extern int decnet_no_fc_max_cwnd;
|
extern int decnet_no_fc_max_cwnd;
|
||||||
|
|
||||||
|
extern int sysctl_decnet_mem[3];
|
||||||
|
extern int sysctl_decnet_wmem[3];
|
||||||
|
extern int sysctl_decnet_rmem[3];
|
||||||
|
|
||||||
#endif /* _NET_DN_H */
|
#endif /* _NET_DN_H */
|
||||||
|
@@ -153,6 +153,7 @@ static struct proto_ops dn_proto_ops;
|
|||||||
static DEFINE_RWLOCK(dn_hash_lock);
|
static DEFINE_RWLOCK(dn_hash_lock);
|
||||||
static struct hlist_head dn_sk_hash[DN_SK_HASH_SIZE];
|
static struct hlist_head dn_sk_hash[DN_SK_HASH_SIZE];
|
||||||
static struct hlist_head dn_wild_sk;
|
static struct hlist_head dn_wild_sk;
|
||||||
|
static atomic_t decnet_memory_allocated;
|
||||||
|
|
||||||
static int __dn_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen, int flags);
|
static int __dn_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen, int flags);
|
||||||
static int __dn_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen, int flags);
|
static int __dn_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen, int flags);
|
||||||
@@ -446,10 +447,26 @@ static void dn_destruct(struct sock *sk)
|
|||||||
dst_release(xchg(&sk->sk_dst_cache, NULL));
|
dst_release(xchg(&sk->sk_dst_cache, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dn_memory_pressure;
|
||||||
|
|
||||||
|
static void dn_enter_memory_pressure(void)
|
||||||
|
{
|
||||||
|
if (!dn_memory_pressure) {
|
||||||
|
dn_memory_pressure = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static struct proto dn_proto = {
|
static struct proto dn_proto = {
|
||||||
.name = "DECNET",
|
.name = "NSP",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.obj_size = sizeof(struct dn_sock),
|
.enter_memory_pressure = dn_enter_memory_pressure,
|
||||||
|
.memory_pressure = &dn_memory_pressure,
|
||||||
|
.memory_allocated = &decnet_memory_allocated,
|
||||||
|
.sysctl_mem = sysctl_decnet_mem,
|
||||||
|
.sysctl_wmem = sysctl_decnet_wmem,
|
||||||
|
.sysctl_rmem = sysctl_decnet_rmem,
|
||||||
|
.max_header = DN_MAX_NSP_DATA_HEADER + 64,
|
||||||
|
.obj_size = sizeof(struct dn_sock),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sock *dn_alloc_sock(struct socket *sock, gfp_t gfp)
|
static struct sock *dn_alloc_sock(struct socket *sock, gfp_t gfp)
|
||||||
@@ -470,6 +487,8 @@ static struct sock *dn_alloc_sock(struct socket *sock, gfp_t gfp)
|
|||||||
sk->sk_family = PF_DECnet;
|
sk->sk_family = PF_DECnet;
|
||||||
sk->sk_protocol = 0;
|
sk->sk_protocol = 0;
|
||||||
sk->sk_allocation = gfp;
|
sk->sk_allocation = gfp;
|
||||||
|
sk->sk_sndbuf = sysctl_decnet_wmem[1];
|
||||||
|
sk->sk_rcvbuf = sysctl_decnet_rmem[1];
|
||||||
|
|
||||||
/* Initialization of DECnet Session Control Port */
|
/* Initialization of DECnet Session Control Port */
|
||||||
scp = DN_SK(sk);
|
scp = DN_SK(sk);
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
*
|
*
|
||||||
* Changes:
|
* Changes:
|
||||||
* Steve Whitehouse - C99 changes and default device handling
|
* Steve Whitehouse - C99 changes and default device handling
|
||||||
|
* Steve Whitehouse - Memory buffer settings, like the tcp ones
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
@@ -37,6 +38,11 @@ int decnet_dr_count = 3;
|
|||||||
int decnet_log_martians = 1;
|
int decnet_log_martians = 1;
|
||||||
int decnet_no_fc_max_cwnd = NSP_MIN_WINDOW;
|
int decnet_no_fc_max_cwnd = NSP_MIN_WINDOW;
|
||||||
|
|
||||||
|
/* Reasonable defaults, I hope, based on tcp's defaults */
|
||||||
|
int sysctl_decnet_mem[3] = { 768 << 3, 1024 << 3, 1536 << 3 };
|
||||||
|
int sysctl_decnet_wmem[3] = { 4 * 1024, 16 * 1024, 128 * 1024 };
|
||||||
|
int sysctl_decnet_rmem[3] = { 4 * 1024, 87380, 87380 * 2 };
|
||||||
|
|
||||||
#ifdef CONFIG_SYSCTL
|
#ifdef CONFIG_SYSCTL
|
||||||
extern int decnet_dst_gc_interval;
|
extern int decnet_dst_gc_interval;
|
||||||
static int min_decnet_time_wait[] = { 5 };
|
static int min_decnet_time_wait[] = { 5 };
|
||||||
@@ -428,6 +434,33 @@ static ctl_table dn_table[] = {
|
|||||||
.extra1 = &min_decnet_no_fc_max_cwnd,
|
.extra1 = &min_decnet_no_fc_max_cwnd,
|
||||||
.extra2 = &max_decnet_no_fc_max_cwnd
|
.extra2 = &max_decnet_no_fc_max_cwnd
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = NET_DECNET_MEM,
|
||||||
|
.procname = "decnet_mem",
|
||||||
|
.data = &sysctl_decnet_mem,
|
||||||
|
.maxlen = sizeof(sysctl_decnet_mem),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = NET_DECNET_RMEM,
|
||||||
|
.procname = "decnet_rmem",
|
||||||
|
.data = &sysctl_decnet_rmem,
|
||||||
|
.maxlen = sizeof(sysctl_decnet_rmem),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.ctl_name = NET_DECNET_WMEM,
|
||||||
|
.procname = "decnet_wmem",
|
||||||
|
.data = &sysctl_decnet_wmem,
|
||||||
|
.maxlen = sizeof(sysctl_decnet_wmem),
|
||||||
|
.mode = 0644,
|
||||||
|
.proc_handler = &proc_dointvec,
|
||||||
|
.strategy = &sysctl_intvec,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.ctl_name = NET_DECNET_DEBUG_LEVEL,
|
.ctl_name = NET_DECNET_DEBUG_LEVEL,
|
||||||
.procname = "debug",
|
.procname = "debug",
|
||||||
|
Reference in New Issue
Block a user