linux/include
Pavel Emelyanov dec827d174 [NETNS]: The generic per-net pointers.
Add the elastic array of void * pointer to the struct net.
The access rules are simple:

 1. register the ops with register_pernet_gen_device to get
    the id of your private pointer
 2. call net_assign_generic() to put the private data on the
    struct net (most preferably this should be done in the
    ->init callback of the ops registered)
 3. do not store any private reference on the net_generic array;
 4. do not change this pointer while the net is alive;
 5. use the net_generic() to get the pointer.

When adding a new pointer, I copy the old array, replace it
with a new one and schedule the old for kfree after an RCU
grace period.

Since the net_generic explores the net->gen array inside rcu
read section and once set the net->gen->ptr[x] pointer never 
changes, this grants us a safe access to generic pointers.

Quoting Paul: "... RCU is protecting -only- the net_generic 
structure that net_generic() is traversing, and the [pointer]
returned by net_generic() is protected by a reference counter 
in the upper-level struct net."

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-04-15 00:36:08 -07:00
..
acpi
asm-alpha alpha: get_current(): don't add zero to current_thread_info()->task 2008-04-02 15:28:20 -07:00
asm-arm kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-avr32 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-blackfin kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-cris kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-frv kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-generic kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-h8300 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-ia64 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-m32r kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-m68k kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-m68knommu kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-mips kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-mn10300 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-parisc kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-powerpc kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-ppc
asm-s390 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-sh kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-sparc kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-sparc64 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-um kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-v850 kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
asm-x86 lguest: comment documentation update. 2008-03-28 11:05:54 +11:00
asm-xtensa kvm: provide kvm.h for all architecture: fixes headers_install 2008-04-02 15:28:18 -07:00
crypto
keys
linux [ISDN] include/linux/isdn.h: remove dead code 2008-04-15 00:30:16 -07:00
math-emu
media
mtd
net [NETNS]: The generic per-net pointers. 2008-04-15 00:36:08 -07:00
pcmcia
rdma
rxrpc
scsi
sound
video
xen
Kbuild