datapath: RCU dereference correct pointer in table.
authorJesse Gross <jesse@nicira.com>
Mon, 6 Dec 2010 19:27:07 +0000 (11:27 -0800)
committerJesse Gross <jesse@nicira.com>
Fri, 10 Dec 2010 01:43:37 +0000 (17:43 -0800)
commiteb0e14ed3f3a719b3cd5bef8cb3112e683e2a9dd
tree9bcd4ecbf7080bcf70b7768be13d56afe285adcf
parent79863c64f9085114759fb1125e35f377301441fb
datapath: RCU dereference correct pointer in table.

Our hash table implementation consists of two levels of buckets
and then arrays of pointers.  The bucket arrays are fixed by the
size of the table, which is therefore protected by the RCU
dereference of the table pointer.  The arrays change when items
are inserted or deleted.  However, in tbl_insert/remove we need
to look at the old values and we do an rcu_dereference() on the
second level array instead of the bucket itself.  Other places
that access the table for lookup do the pointer dereference in
the correct order.

Found by sparse.

Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
datapath/table.c