Skip to content

Commit 93f5608

Browse files
tgrafdavem330
authored andcommitted
rhashtable: fix annotations for rht_for_each_entry_rcu()
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>
1 parent c91eee5 commit 93f5608

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

include/linux/rhashtable.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,6 @@ void rhashtable_destroy(const struct rhashtable *ht);
123123
typeof(ptr) __ptr = (ptr); \
124124
__ptr ? rht_entry(__ptr, type, member) : NULL; \
125125
})
126-
#define rht_entry_safe_rcu(ptr, type, member) \
127-
({ \
128-
typeof(*ptr) __rcu *__ptr = (typeof(*ptr) __rcu __force *)ptr; \
129-
__ptr ? container_of((typeof(ptr))rcu_dereference_raw(__ptr), type, member) : NULL; \
130-
})
131126

132127
#define rht_next_entry_safe(pos, ht, member) \
133128
({ \
@@ -204,9 +199,10 @@ void rhashtable_destroy(const struct rhashtable *ht);
204199
* traversal is guarded by rcu_read_lock().
205200
*/
206201
#define rht_for_each_entry_rcu(pos, head, member) \
207-
for (pos = rht_entry_safe_rcu(head, typeof(*(pos)), member); \
202+
for (pos = rht_entry_safe(rcu_dereference_raw(head), \
203+
typeof(*(pos)), member); \
208204
pos; \
209-
pos = rht_entry_safe_rcu((pos)->member.next, \
210-
typeof(*(pos)), member))
205+
pos = rht_entry_safe(rcu_dereference_raw((pos)->member.next), \
206+
typeof(*(pos)), member))
211207

212208
#endif /* _LINUX_RHASHTABLE_H */

0 commit comments

Comments
 (0)