diff options
Diffstat (limited to 'net/sched/cls_flower.c')
-rw-r--r-- | net/sched/cls_flower.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 4e74508515f4..2b5be42a9f1c 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -326,6 +326,8 @@ static void fl_destroy_sleepable(struct work_struct *work) struct cls_fl_head *head = container_of(to_rcu_work(work), struct cls_fl_head, rwork); + + rhashtable_destroy(&head->ht); kfree(head); module_put(THIS_MODULE); } @@ -875,7 +877,7 @@ static int fl_check_assign_mask(struct cls_fl_head *head, return PTR_ERR(newmask); fnew->mask = newmask; - } else if (fold && fold->mask == fnew->mask) { + } else if (fold && fold->mask != fnew->mask) { return -EINVAL; } @@ -1028,7 +1030,7 @@ errout_mask: fl_mask_put(head, fnew->mask, false); errout_idr: - if (fnew->handle) + if (!fold) idr_remove(&head->handle_idr, fnew->handle); errout: tcf_exts_destroy(&fnew->exts); |