diff options
Diffstat (limited to 'net/sched/cls_basic.c')
| -rw-r--r-- | net/sched/cls_basic.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c index fad08e521c24..4a91f082a81d 100644 --- a/net/sched/cls_basic.c +++ b/net/sched/cls_basic.c | |||
| @@ -81,6 +81,13 @@ static void basic_put(struct tcf_proto *tp, unsigned long f) | |||
| 81 | 81 | ||
| 82 | static int basic_init(struct tcf_proto *tp) | 82 | static int basic_init(struct tcf_proto *tp) |
| 83 | { | 83 | { |
| 84 | struct basic_head *head; | ||
| 85 | |||
| 86 | head = kzalloc(sizeof(*head), GFP_KERNEL); | ||
| 87 | if (head == NULL) | ||
| 88 | return -ENOBUFS; | ||
| 89 | INIT_LIST_HEAD(&head->flist); | ||
| 90 | tp->root = head; | ||
| 84 | return 0; | 91 | return 0; |
| 85 | } | 92 | } |
| 86 | 93 | ||
| @@ -102,6 +109,7 @@ static void basic_destroy(struct tcf_proto *tp) | |||
| 102 | list_del(&f->link); | 109 | list_del(&f->link); |
| 103 | basic_delete_filter(tp, f); | 110 | basic_delete_filter(tp, f); |
| 104 | } | 111 | } |
| 112 | kfree(head); | ||
| 105 | } | 113 | } |
| 106 | 114 | ||
| 107 | static int basic_delete(struct tcf_proto *tp, unsigned long arg) | 115 | static int basic_delete(struct tcf_proto *tp, unsigned long arg) |
| @@ -176,15 +184,6 @@ static int basic_change(struct tcf_proto *tp, unsigned long base, u32 handle, | |||
| 176 | } | 184 | } |
| 177 | 185 | ||
| 178 | err = -ENOBUFS; | 186 | err = -ENOBUFS; |
| 179 | if (head == NULL) { | ||
| 180 | head = kzalloc(sizeof(*head), GFP_KERNEL); | ||
| 181 | if (head == NULL) | ||
| 182 | goto errout; | ||
| 183 | |||
| 184 | INIT_LIST_HEAD(&head->flist); | ||
| 185 | tp->root = head; | ||
| 186 | } | ||
| 187 | |||
| 188 | f = kzalloc(sizeof(*f), GFP_KERNEL); | 187 | f = kzalloc(sizeof(*f), GFP_KERNEL); |
| 189 | if (f == NULL) | 188 | if (f == NULL) |
| 190 | goto errout; | 189 | goto errout; |
