diff options
author | David S. Miller <davem@davemloft.net> | 2010-12-08 16:15:38 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-12-08 16:47:38 -0500 |
commit | fe6c791570efe717946ea7b7dd50aec96b70d551 (patch) | |
tree | 1becb5e8aea7a9c9a7d78f987bd73b0a5d8ee434 /net/core | |
parent | f8bf5681cf15f77692c8ad8cb95d059ff7c622c9 (diff) | |
parent | f19872575ff7819a3723154657a497d9bca66b33 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
net/llc/af_llc.c
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/filter.c | 19 | ||||
-rw-r--r-- | net/core/request_sock.c | 4 |
2 files changed, 7 insertions, 16 deletions
diff --git a/net/core/filter.c b/net/core/filter.c index 25500f16a18a..e193e29d4671 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -615,23 +615,16 @@ int sk_chk_filter(struct sock_filter *filter, int flen) | |||
615 | EXPORT_SYMBOL(sk_chk_filter); | 615 | EXPORT_SYMBOL(sk_chk_filter); |
616 | 616 | ||
617 | /** | 617 | /** |
618 | * sk_filter_rcu_release - Release a socket filter by rcu_head | 618 | * sk_filter_release_rcu - Release a socket filter by rcu_head |
619 | * @rcu: rcu_head that contains the sk_filter to free | 619 | * @rcu: rcu_head that contains the sk_filter to free |
620 | */ | 620 | */ |
621 | static void sk_filter_rcu_release(struct rcu_head *rcu) | 621 | void sk_filter_release_rcu(struct rcu_head *rcu) |
622 | { | 622 | { |
623 | struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu); | 623 | struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu); |
624 | 624 | ||
625 | sk_filter_release(fp); | 625 | kfree(fp); |
626 | } | ||
627 | |||
628 | static void sk_filter_delayed_uncharge(struct sock *sk, struct sk_filter *fp) | ||
629 | { | ||
630 | unsigned int size = sk_filter_len(fp); | ||
631 | |||
632 | atomic_sub(size, &sk->sk_omem_alloc); | ||
633 | call_rcu_bh(&fp->rcu, sk_filter_rcu_release); | ||
634 | } | 626 | } |
627 | EXPORT_SYMBOL(sk_filter_release_rcu); | ||
635 | 628 | ||
636 | /** | 629 | /** |
637 | * sk_attach_filter - attach a socket filter | 630 | * sk_attach_filter - attach a socket filter |
@@ -675,7 +668,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) | |||
675 | rcu_assign_pointer(sk->sk_filter, fp); | 668 | rcu_assign_pointer(sk->sk_filter, fp); |
676 | 669 | ||
677 | if (old_fp) | 670 | if (old_fp) |
678 | sk_filter_delayed_uncharge(sk, old_fp); | 671 | sk_filter_uncharge(sk, old_fp); |
679 | return 0; | 672 | return 0; |
680 | } | 673 | } |
681 | EXPORT_SYMBOL_GPL(sk_attach_filter); | 674 | EXPORT_SYMBOL_GPL(sk_attach_filter); |
@@ -689,7 +682,7 @@ int sk_detach_filter(struct sock *sk) | |||
689 | sock_owned_by_user(sk)); | 682 | sock_owned_by_user(sk)); |
690 | if (filter) { | 683 | if (filter) { |
691 | rcu_assign_pointer(sk->sk_filter, NULL); | 684 | rcu_assign_pointer(sk->sk_filter, NULL); |
692 | sk_filter_delayed_uncharge(sk, filter); | 685 | sk_filter_uncharge(sk, filter); |
693 | ret = 0; | 686 | ret = 0; |
694 | } | 687 | } |
695 | return ret; | 688 | return ret; |
diff --git a/net/core/request_sock.c b/net/core/request_sock.c index 41d99435f62d..182236b2510a 100644 --- a/net/core/request_sock.c +++ b/net/core/request_sock.c | |||
@@ -46,9 +46,7 @@ int reqsk_queue_alloc(struct request_sock_queue *queue, | |||
46 | nr_table_entries = roundup_pow_of_two(nr_table_entries + 1); | 46 | nr_table_entries = roundup_pow_of_two(nr_table_entries + 1); |
47 | lopt_size += nr_table_entries * sizeof(struct request_sock *); | 47 | lopt_size += nr_table_entries * sizeof(struct request_sock *); |
48 | if (lopt_size > PAGE_SIZE) | 48 | if (lopt_size > PAGE_SIZE) |
49 | lopt = __vmalloc(lopt_size, | 49 | lopt = vzalloc(lopt_size); |
50 | GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, | ||
51 | PAGE_KERNEL); | ||
52 | else | 50 | else |
53 | lopt = kzalloc(lopt_size, GFP_KERNEL); | 51 | lopt = kzalloc(lopt_size, GFP_KERNEL); |
54 | if (lopt == NULL) | 52 | if (lopt == NULL) |