summaryrefslogtreecommitdiff
path: root/include/net/netns/generic.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/netns/generic.h')
-rw-r--r--include/net/netns/generic.h20
1 files changed, 12 insertions, 8 deletions
diff --git a/include/net/netns/generic.h b/include/net/netns/generic.h
index 0931618c0f7f..00c399edeed1 100644
--- a/include/net/netns/generic.h
+++ b/include/net/netns/generic.h
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0 */
/*
* generic net pointers
*/
@@ -7,6 +8,7 @@
#include <linux/bug.h>
#include <linux/rcupdate.h>
+#include <net/net_namespace.h>
/*
* Generic net pointers are to be used by modules to put some private
@@ -25,24 +27,26 @@
*/
struct net_generic {
- unsigned int len;
- struct rcu_head rcu;
-
- void *ptr[0];
+ union {
+ struct {
+ unsigned int len;
+ struct rcu_head rcu;
+ } s;
+
+ DECLARE_FLEX_ARRAY(void *, ptr);
+ };
};
-static inline void *net_generic(const struct net *net, int id)
+static inline void *net_generic(const struct net *net, unsigned int id)
{
struct net_generic *ng;
void *ptr;
rcu_read_lock();
ng = rcu_dereference(net->gen);
- BUG_ON(id == 0 || id > ng->len);
- ptr = ng->ptr[id - 1];
+ ptr = ng->ptr[id];
rcu_read_unlock();
- BUG_ON(!ptr);
return ptr;
}
#endif