Skip to content

Commit

Permalink
rhashtable: fix annotations for rht_for_each_entry_rcu()
Browse files Browse the repository at this point in the history
Call rcu_deference_raw() directly from within rht_for_each_entry_rcu()
as list_for_each_entry_rcu() does.

Fixes the following sparse warnings:
net/netlink/af_netlink.c:2906:25:    expected struct rhash_head const *__mptr
net/netlink/af_netlink.c:2906:25:    got struct rhash_head [noderef] <asn:4>*<noident>

Fixes: e341694 ("netlink: Convert netlink_lookup() to use RCU protected hash table")
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Thomas Graf authored and David S. Miller committed Aug 14, 2014
1 parent c91eee5 commit 93f5608
Showing 1 changed file with 4 additions and 8 deletions.
12 changes: 4 additions & 8 deletions include/linux/rhashtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,6 @@ void rhashtable_destroy(const struct rhashtable *ht);
typeof(ptr) __ptr = (ptr); \
__ptr ? rht_entry(__ptr, type, member) : NULL; \
})
#define rht_entry_safe_rcu(ptr, type, member) \
({ \
typeof(*ptr) __rcu *__ptr = (typeof(*ptr) __rcu __force *)ptr; \
__ptr ? container_of((typeof(ptr))rcu_dereference_raw(__ptr), type, member) : NULL; \
})

#define rht_next_entry_safe(pos, ht, member) \
({ \
Expand Down Expand Up @@ -204,9 +199,10 @@ void rhashtable_destroy(const struct rhashtable *ht);
* traversal is guarded by rcu_read_lock().
*/
#define rht_for_each_entry_rcu(pos, head, member) \
for (pos = rht_entry_safe_rcu(head, typeof(*(pos)), member); \
for (pos = rht_entry_safe(rcu_dereference_raw(head), \
typeof(*(pos)), member); \
pos; \
pos = rht_entry_safe_rcu((pos)->member.next, \
typeof(*(pos)), member))
pos = rht_entry_safe(rcu_dereference_raw((pos)->member.next), \
typeof(*(pos)), member))

#endif /* _LINUX_RHASHTABLE_H */

0 comments on commit 93f5608

Please sign in to comment.