Re: [PATCH 3/3] nfnetlink_queue: use hash table to speed up entry finding.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 15, 2010 at 11:35 PM, Patrick McHardy <kaber@xxxxxxxxx> wrote:
> Changli Gao wrote:
>> static int
>> nfqnl_rcv_nl_event(struct notifier_block *this,
>>                    unsigned long event, void *ptr)
>> {
>>         struct netlink_notify *n = ptr;
>>
>>         if (event == NETLINK_URELEASE && n->protocol == NETLINK_NETFILTER) {
>>                 int i;
>>
>>                 /* destroy all instances for this pid */
>>                 spin_lock(&instances_lock);
>>                 for (i = 0; i < INSTANCE_BUCKETS; i++) {
>>                         struct hlist_node *tmp, *t2;
>>                         struct nfqnl_instance *inst;
>>                         struct hlist_head *head = &instance_table[i];
>>
>>                         hlist_for_each_entry_safe(inst, tmp, t2, head, hlist) {
>>                                 if ((n->net == &init_net) &&
>>                                     (n->pid == inst->peer_pid))
>>                                         __instance_destroy(inst);
>>                         }
>>                 }
>>                 spin_unlock(&instances_lock);
>>         }
>>         return NOTIFY_DONE;
>> }
>>
>> static struct notifier_block nfqnl_rtnl_notifier = {
>>         .notifier_call  = nfqnl_rcv_nl_event,
>> };
>>
>
> Ah, right. So call nfnl_lock() or convert the spinlock to a
> mutex.
>

We can't convert the spinlock to a mutex simply. The notifier chain is
an atomic notifier chain.

-- 
Regards,
Changli Gao(xiaosuo@xxxxxxxxx)
��.n��������+%������w��{.n����z��׫���n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�m


[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux