diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/sctp/protocol.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index cdd881142f2c..ed9acffe8105 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -52,6 +52,8 @@ | |||
52 | #include <linux/inetdevice.h> | 52 | #include <linux/inetdevice.h> |
53 | #include <linux/seq_file.h> | 53 | #include <linux/seq_file.h> |
54 | #include <linux/bootmem.h> | 54 | #include <linux/bootmem.h> |
55 | #include <linux/highmem.h> | ||
56 | #include <linux/swap.h> | ||
55 | #include <net/net_namespace.h> | 57 | #include <net/net_namespace.h> |
56 | #include <net/protocol.h> | 58 | #include <net/protocol.h> |
57 | #include <net/ip.h> | 59 | #include <net/ip.h> |
@@ -1080,6 +1082,7 @@ SCTP_STATIC __init int sctp_init(void) | |||
1080 | int status = -EINVAL; | 1082 | int status = -EINVAL; |
1081 | unsigned long goal; | 1083 | unsigned long goal; |
1082 | unsigned long limit; | 1084 | unsigned long limit; |
1085 | unsigned long nr_pages; | ||
1083 | int max_share; | 1086 | int max_share; |
1084 | int order; | 1087 | int order; |
1085 | 1088 | ||
@@ -1175,8 +1178,9 @@ SCTP_STATIC __init int sctp_init(void) | |||
1175 | * Note this initalizes the data in sctpv6_prot too | 1178 | * Note this initalizes the data in sctpv6_prot too |
1176 | * Unabashedly stolen from tcp_init | 1179 | * Unabashedly stolen from tcp_init |
1177 | */ | 1180 | */ |
1178 | limit = min(num_physpages, 1UL<<(28-PAGE_SHIFT)) >> (20-PAGE_SHIFT); | 1181 | nr_pages = totalram_pages - totalhigh_pages; |
1179 | limit = (limit * (num_physpages >> (20-PAGE_SHIFT))) >> (PAGE_SHIFT-11); | 1182 | limit = min(nr_pages, 1UL<<(28-PAGE_SHIFT)) >> (20-PAGE_SHIFT); |
1183 | limit = (limit * (nr_pages >> (20-PAGE_SHIFT))) >> (PAGE_SHIFT-11); | ||
1180 | limit = max(limit, 128UL); | 1184 | limit = max(limit, 128UL); |
1181 | sysctl_sctp_mem[0] = limit / 4 * 3; | 1185 | sysctl_sctp_mem[0] = limit / 4 * 3; |
1182 | sysctl_sctp_mem[1] = limit; | 1186 | sysctl_sctp_mem[1] = limit; |
@@ -1186,7 +1190,7 @@ SCTP_STATIC __init int sctp_init(void) | |||
1186 | limit = (sysctl_sctp_mem[1]) << (PAGE_SHIFT - 7); | 1190 | limit = (sysctl_sctp_mem[1]) << (PAGE_SHIFT - 7); |
1187 | max_share = min(4UL*1024*1024, limit); | 1191 | max_share = min(4UL*1024*1024, limit); |
1188 | 1192 | ||
1189 | sysctl_sctp_rmem[0] = PAGE_SIZE; /* give each asoc 1 page min */ | 1193 | sysctl_sctp_rmem[0] = SK_MEM_QUANTUM; /* give each asoc 1 page min */ |
1190 | sysctl_sctp_rmem[1] = (1500 *(sizeof(struct sk_buff) + 1)); | 1194 | sysctl_sctp_rmem[1] = (1500 *(sizeof(struct sk_buff) + 1)); |
1191 | sysctl_sctp_rmem[2] = max(sysctl_sctp_rmem[1], max_share); | 1195 | sysctl_sctp_rmem[2] = max(sysctl_sctp_rmem[1], max_share); |
1192 | 1196 | ||