Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 122230
b: refs/heads/master
c: c68cd1a
h: refs/heads/master
v: v3
  • Loading branch information
Alexey Dobriyan authored and David S. Miller committed Nov 26, 2008
1 parent ecd0ca9 commit afdbd0f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 20 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: 59c9940ed0ef026673cac52f2eaed77af7d486da
refs/heads/master: c68cd1a01ba56995d85a4a62b195b2b3f6415c64
3 changes: 2 additions & 1 deletion trunk/include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -1306,7 +1306,8 @@ static inline void xfrm6_fini(void)
#endif

#ifdef CONFIG_XFRM_STATISTICS
extern int xfrm_proc_init(void);
extern int xfrm_proc_init(struct net *net);
extern void xfrm_proc_fini(struct net *net);
#endif

extern void xfrm_state_walk_init(struct xfrm_state_walk *walk, u8 proto);
Expand Down
11 changes: 7 additions & 4 deletions trunk/net/xfrm/xfrm_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -2377,14 +2377,20 @@ static struct notifier_block xfrm_dev_notifier = {
#ifdef CONFIG_XFRM_STATISTICS
static int __net_init xfrm_statistics_init(struct net *net)
{
int rv;

if (snmp_mib_init((void **)net->mib.xfrm_statistics,
sizeof(struct linux_xfrm_mib)) < 0)
return -ENOMEM;
return 0;
rv = xfrm_proc_init(net);
if (rv < 0)
snmp_mib_free((void **)net->mib.xfrm_statistics);
return rv;
}

static void xfrm_statistics_fini(struct net *net)
{
xfrm_proc_fini(net);
snmp_mib_free((void **)net->mib.xfrm_statistics);
}
#else
Expand Down Expand Up @@ -2524,9 +2530,6 @@ void __init xfrm_init(void)
{
register_pernet_subsys(&xfrm_net_ops);
xfrm_input_init();
#ifdef CONFIG_XFRM_STATISTICS
xfrm_proc_init();
#endif
}

#ifdef CONFIG_AUDITSYSCALL
Expand Down
26 changes: 12 additions & 14 deletions trunk/net/xfrm/xfrm_proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,39 +59,37 @@ fold_field(void *mib[], int offt)

static int xfrm_statistics_seq_show(struct seq_file *seq, void *v)
{
struct net *net = seq->private;
int i;
for (i=0; xfrm_mib_list[i].name; i++)
seq_printf(seq, "%-24s\t%lu\n", xfrm_mib_list[i].name,
fold_field((void **)init_net.mib.xfrm_statistics,
fold_field((void **)net->mib.xfrm_statistics,
xfrm_mib_list[i].entry));
return 0;
}

static int xfrm_statistics_seq_open(struct inode *inode, struct file *file)
{
return single_open(file, xfrm_statistics_seq_show, NULL);
return single_open_net(inode, file, xfrm_statistics_seq_show);
}

static struct file_operations xfrm_statistics_seq_fops = {
.owner = THIS_MODULE,
.open = xfrm_statistics_seq_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
.release = single_release_net,
};

int __init xfrm_proc_init(void)
int __net_init xfrm_proc_init(struct net *net)
{
int rc = 0;

if (!proc_net_fops_create(&init_net, "xfrm_stat", S_IRUGO,
if (!proc_net_fops_create(net, "xfrm_stat", S_IRUGO,
&xfrm_statistics_seq_fops))
goto stat_fail;

out:
return rc;
return -ENOMEM;
return 0;
}

stat_fail:
rc = -ENOMEM;
goto out;
void xfrm_proc_fini(struct net *net)
{
proc_net_remove(net, "xfrm_stat");
}

0 comments on commit afdbd0f

Please sign in to comment.