rtnl_nets
static void rtnl_nets_init(struct rtnl_nets *rtnl_nets)
memset(rtnl_nets, 0, sizeof(*rtnl_nets));
static void rtnl_nets_destroy(struct rtnl_nets *rtnl_nets)
for (i = 0; i < rtnl_nets->len; i++) {
put_net(rtnl_nets->net[i]);
rtnl_nets->net[i] = NULL;
rtnl_nets->len = 0;
static void rtnl_nets_add(struct rtnl_nets *rtnl_nets, struct net *net)
DEBUG_NET_WARN_ON_ONCE(rtnl_nets->len == ARRAY_SIZE(rtnl_nets->net));
for (i = 0; i < rtnl_nets->len; i++) {
switch (rtnl_net_cmp_locks(rtnl_nets->net[i], net)) {
swap(rtnl_nets->net[i], net);
rtnl_nets->net[i] = net;
rtnl_nets->len++;
static void rtnl_nets_lock(struct rtnl_nets *rtnl_nets)
for (i = 0; i < rtnl_nets->len; i++)
__rtnl_net_lock(rtnl_nets->net[i]);
static void rtnl_nets_unlock(struct rtnl_nets *rtnl_nets)
for (i = 0; i < rtnl_nets->len; i++)
struct rtnl_nets rtnl_nets;
__rtnl_net_unlock(rtnl_nets->net[i]);
rtnl_nets_init(&rtnl_nets);
rtnl_nets_add(&rtnl_nets, get_net(net));
rtnl_nets_add(&rtnl_nets, tgt_net);
rtnl_nets_lock(&rtnl_nets);
rtnl_nets_unlock(&rtnl_nets);
rtnl_nets_destroy(&rtnl_nets);
struct rtnl_nets rtnl_nets;
rtnl_nets_init(&rtnl_nets);
rtnl_nets_add(&rtnl_nets, peer_net);
rtnl_nets_add(&rtnl_nets, tgt_net);
rtnl_nets_add(&rtnl_nets, link_net);
rtnl_nets_lock(&rtnl_nets);
rtnl_nets_unlock(&rtnl_nets);
rtnl_nets_destroy(&rtnl_nets);