Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 78743
b: refs/heads/master
c: 1c340b2
h: refs/heads/master
i:
  78741: be24171
  78739: da5739d
  78735: 3642027
v: v3
  • Loading branch information
Denis V. Lunev authored and David S. Miller committed Jan 28, 2008
1 parent ad38d79 commit 5f942ed
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6e04d01dfa6fe81d6bcae1e85de695285086cee2
refs/heads/master: 1c340b2fd73880136c438e6e7978288fbec8273f
44 changes: 32 additions & 12 deletions trunk/net/ipv4/fib_trie.c
Original file line number Diff line number Diff line change
Expand Up @@ -1995,6 +1995,7 @@ struct fib_table *fib_hash_init(u32 id)
#ifdef CONFIG_PROC_FS
/* Depth first Trie walk iterator */
struct fib_trie_iter {
struct seq_net_private p;
struct trie *trie_local, *trie_main;
struct tnode *tnode;
struct trie *trie;
Expand Down Expand Up @@ -2162,17 +2163,18 @@ static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat)

static int fib_triestat_seq_show(struct seq_file *seq, void *v)
{
struct net *net = (struct net *)seq->private;
struct trie *trie_local, *trie_main;
struct trie_stat *stat;
struct fib_table *tb;

trie_local = NULL;
tb = fib_get_table(&init_net, RT_TABLE_LOCAL);
tb = fib_get_table(net, RT_TABLE_LOCAL);
if (tb)
trie_local = (struct trie *) tb->tb_data;

trie_main = NULL;
tb = fib_get_table(&init_net, RT_TABLE_MAIN);
tb = fib_get_table(net, RT_TABLE_MAIN);
if (tb)
trie_main = (struct trie *) tb->tb_data;

Expand Down Expand Up @@ -2202,15 +2204,33 @@ static int fib_triestat_seq_show(struct seq_file *seq, void *v)

static int fib_triestat_seq_open(struct inode *inode, struct file *file)
{
return single_open(file, fib_triestat_seq_show, NULL);
int err;
struct net *net;

net = get_proc_net(inode);
if (net == NULL)
return -ENXIO;
err = single_open(file, fib_triestat_seq_show, net);
if (err < 0) {
put_net(net);
return err;
}
return 0;
}

static int fib_triestat_seq_release(struct inode *ino, struct file *f)
{
struct seq_file *seq = f->private_data;
put_net(seq->private);
return single_release(ino, f);
}

static const struct file_operations fib_triestat_fops = {
.owner = THIS_MODULE,
.open = fib_triestat_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
.release = fib_triestat_seq_release,
};

static struct node *fib_trie_get_idx(struct fib_trie_iter *iter,
Expand Down Expand Up @@ -2239,12 +2259,12 @@ static void *fib_trie_seq_start(struct seq_file *seq, loff_t *pos)
struct fib_table *tb;

if (!iter->trie_local) {
tb = fib_get_table(&init_net, RT_TABLE_LOCAL);
tb = fib_get_table(iter->p.net, RT_TABLE_LOCAL);
if (tb)
iter->trie_local = (struct trie *) tb->tb_data;
}
if (!iter->trie_main) {
tb = fib_get_table(&init_net, RT_TABLE_MAIN);
tb = fib_get_table(iter->p.net, RT_TABLE_MAIN);
if (tb)
iter->trie_main = (struct trie *) tb->tb_data;
}
Expand Down Expand Up @@ -2388,16 +2408,16 @@ static const struct seq_operations fib_trie_seq_ops = {

static int fib_trie_seq_open(struct inode *inode, struct file *file)
{
return seq_open_private(file, &fib_trie_seq_ops,
sizeof(struct fib_trie_iter));
return seq_open_net(inode, file, &fib_trie_seq_ops,
sizeof(struct fib_trie_iter));
}

static const struct file_operations fib_trie_fops = {
.owner = THIS_MODULE,
.open = fib_trie_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release_private,
.release = seq_release_net,
};

static unsigned fib_flag_trans(int type, __be32 mask, const struct fib_info *fi)
Expand Down Expand Up @@ -2492,16 +2512,16 @@ static const struct seq_operations fib_route_seq_ops = {

static int fib_route_seq_open(struct inode *inode, struct file *file)
{
return seq_open_private(file, &fib_route_seq_ops,
sizeof(struct fib_trie_iter));
return seq_open_net(inode, file, &fib_route_seq_ops,
sizeof(struct fib_trie_iter));
}

static const struct file_operations fib_route_fops = {
.owner = THIS_MODULE,
.open = fib_route_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = seq_release_private,
.release = seq_release_net,
};

int __net_init fib_proc_init(struct net *net)
Expand Down

0 comments on commit 5f942ed

Please sign in to comment.