Patrick McHardy wrote: > Changli Gao wrote: >> On Thu, Apr 15, 2010 at 6:36 PM, Patrick McHardy <kaber@xxxxxxxxx> wrote: >>> Changli Gao wrote: >>>> On Tue, Apr 13, 2010 at 9:25 PM, Patrick McHardy <kaber@xxxxxxxxx> wrote: >>>>>> Yes, that is why vmalloc() is perfect for this case. No extra memory for >>>>>> management, but one pointer for each page of memory. >>>>> I agree, if it works for conntrack, it certainly also works for >>>>> nfnetlink_queue. >>>>> >>>> I need to allocate memory in atomic section, so vmalloc() can't be used. :( >>> Why? >>> >> instance_create() is called in rcu read-side critical section, and the >> whole body of this function is protected by the spinlock >> instances_lock. All these make memory allocation for queue instances >> should be atomic. > > That should be easily fixable. For the lookup we can add a reference > counter so we don't need the rcu read side critical section. Actually we don't even need that, since we're holding nfnl_mutex the instance can't go away. > For creation the lock actually looks unnecessary since all nfnetlink > handlers run under nfnl_mutex, so we can't have concurrent creation > and removal of queuing instances. Well, we need it for list insertion > to avoid races with the seq file handlers, but we don't need it > before that. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html