aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-12-08 16:15:38 -0500
committerDavid S. Miller <davem@davemloft.net>2010-12-08 16:47:38 -0500
commitfe6c791570efe717946ea7b7dd50aec96b70d551 (patch)
tree1becb5e8aea7a9c9a7d78f987bd73b0a5d8ee434 /net/core
parentf8bf5681cf15f77692c8ad8cb95d059ff7c622c9 (diff)
parentf19872575ff7819a3723154657a497d9bca66b33 (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.c19
-rw-r--r--net/core/request_sock.c4
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)
615EXPORT_SYMBOL(sk_chk_filter); 615EXPORT_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 */
621static void sk_filter_rcu_release(struct rcu_head *rcu) 621void 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
628static 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}
627EXPORT_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}
681EXPORT_SYMBOL_GPL(sk_attach_filter); 674EXPORT_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)