Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1218854a authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki
Browse files

[NET] NETNS: Omit seq_net_private->net without CONFIG_NET_NS.



Without CONFIG_NET_NS, no namespace other than &init_net exists,
no need to store net in seq_net_private.

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
parent 3b1e0a65
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -44,7 +44,9 @@ int seq_open_net(struct inode *ino, struct file *f,
		put_net(net);
		return -ENOMEM;
	}
#ifdef CONFIG_NET_NS
	p->net = net;
#endif
	return 0;
}
EXPORT_SYMBOL_GPL(seq_open_net);
@@ -52,12 +54,10 @@ EXPORT_SYMBOL_GPL(seq_open_net);
int seq_release_net(struct inode *ino, struct file *f)
{
	struct seq_file *seq;
	struct seq_net_private *p;

	seq = f->private_data;
	p = seq->private;

	put_net(p->net);
	put_net(seq_file_net(seq));
	seq_release_private(ino, f);
	return 0;
}
+7 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include <linux/types.h>
#include <linux/string.h>
#include <linux/mutex.h>
#include <net/net_namespace.h>

struct seq_operations;
struct file;
@@ -64,7 +65,9 @@ extern struct list_head *seq_list_next(void *v, struct list_head *head,

struct net;
struct seq_net_private {
#ifdef CONFIG_NET_NS
	struct net *net;
#endif
};

int seq_open_net(struct inode *, struct file *,
@@ -72,7 +75,11 @@ int seq_open_net(struct inode *, struct file *,
int seq_release_net(struct inode *, struct file *);
static inline struct net *seq_file_net(struct seq_file *seq)
{
#ifdef CONFIG_NET_NS
	return ((struct seq_net_private *)seq->private)->net;
#else
	return &init_net;
#endif
}

#endif
+4 −4
Original line number Diff line number Diff line
@@ -2145,7 +2145,7 @@ EXPORT_SYMBOL(__neigh_for_each_release);
static struct neighbour *neigh_get_first(struct seq_file *seq)
{
	struct neigh_seq_state *state = seq->private;
	struct net *net = state->p.net;
	struct net *net = seq_file_net(seq);
	struct neigh_table *tbl = state->tbl;
	struct neighbour *n = NULL;
	int bucket = state->bucket;
@@ -2186,7 +2186,7 @@ static struct neighbour *neigh_get_next(struct seq_file *seq,
					loff_t *pos)
{
	struct neigh_seq_state *state = seq->private;
	struct net *net = state->p.net;
	struct net *net = seq_file_net(seq);
	struct neigh_table *tbl = state->tbl;

	if (state->neigh_sub_iter) {
@@ -2246,7 +2246,7 @@ static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)
static struct pneigh_entry *pneigh_get_first(struct seq_file *seq)
{
	struct neigh_seq_state *state = seq->private;
	struct net * net = state->p.net;
	struct net *net = seq_file_net(seq);
	struct neigh_table *tbl = state->tbl;
	struct pneigh_entry *pn = NULL;
	int bucket = state->bucket;
@@ -2269,7 +2269,7 @@ static struct pneigh_entry *pneigh_get_next(struct seq_file *seq,
					    loff_t *pos)
{
	struct neigh_seq_state *state = seq->private;
	struct net * net = state->p.net;
	struct net *net = seq_file_net(seq);
	struct neigh_table *tbl = state->tbl;

	pn = pn->next;
+2 −3
Original line number Diff line number Diff line
@@ -821,7 +821,7 @@ static struct fib_alias *fib_get_first(struct seq_file *seq)
	struct fib_table *main_table;
	struct fn_hash *table;

	main_table = fib_get_table(iter->p.net, RT_TABLE_MAIN);
	main_table = fib_get_table(seq_file_net(seq), RT_TABLE_MAIN);
	table = (struct fn_hash *)main_table->tb_data;

	iter->bucket    = 0;
@@ -959,11 +959,10 @@ static struct fib_alias *fib_get_idx(struct seq_file *seq, loff_t pos)
static void *fib_seq_start(struct seq_file *seq, loff_t *pos)
	__acquires(fib_hash_lock)
{
	struct fib_iter_state *iter = seq->private;
	void *v = NULL;

	read_lock(&fib_hash_lock);
	if (fib_get_table(iter->p.net, RT_TABLE_MAIN))
	if (fib_get_table(seq_file_net(seq), RT_TABLE_MAIN))
		v = *pos ? fib_get_idx(seq, *pos - 1) : SEQ_START_TOKEN;
	return v;
}
+6 −7
Original line number Diff line number Diff line
@@ -2279,9 +2279,10 @@ static const struct file_operations fib_triestat_fops = {
	.release = fib_triestat_seq_release,
};

static struct node *fib_trie_get_idx(struct fib_trie_iter *iter, loff_t pos)
static struct node *fib_trie_get_idx(struct seq_file *seq, loff_t pos)
{
	struct net *net = iter->p.net;
	struct fib_trie_iter *iter = seq->private;
	struct net *net = seq_file_net(seq);
	loff_t idx = 0;
	unsigned int h;

@@ -2309,16 +2310,14 @@ static struct node *fib_trie_get_idx(struct fib_trie_iter *iter, loff_t pos)
static void *fib_trie_seq_start(struct seq_file *seq, loff_t *pos)
	__acquires(RCU)
{
	struct fib_trie_iter *iter = seq->private;

	rcu_read_lock();
	return fib_trie_get_idx(iter, *pos);
	return fib_trie_get_idx(seq, *pos);
}

static void *fib_trie_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{
	struct fib_trie_iter *iter = seq->private;
	struct net *net = iter->p.net;
	struct net *net = seq_file_net(seq);
	struct fib_table *tb = iter->tb;
	struct hlist_node *tb_node;
	unsigned int h;
@@ -2513,7 +2512,7 @@ static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos)
	struct fib_table *tb;

	rcu_read_lock();
	tb = fib_get_table(iter->p.net, RT_TABLE_MAIN);
	tb = fib_get_table(seq_file_net(seq), RT_TABLE_MAIN);
	if (!tb)
		return NULL;

Loading