Skip to content

Commit

Permalink
[IPV6]: make flowlabel to return an error
Browse files Browse the repository at this point in the history
This patch makes the flowlab subsystem to return an error code and makes
some cleanup with procfs ifdefs.
The af_inet6 will use the flowlabel init return code to check the initialization
was correct.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Daniel Lezcano authored and David S. Miller committed Jan 28, 2008
1 parent 51602b2 commit 0a3e78a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 9 deletions.
2 changes: 1 addition & 1 deletion include/net/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ extern struct ipv6_txoptions *fl6_merge_options(struct ipv6_txoptions * opt_spac
struct ipv6_txoptions * fopt);
extern void fl6_free_socklist(struct sock *sk);
extern int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen);
extern void ip6_flowlabel_init(void);
extern int ip6_flowlabel_init(void);
extern void ip6_flowlabel_cleanup(void);

static inline void fl6_sock_release(struct ip6_flowlabel *fl)
Expand Down
5 changes: 4 additions & 1 deletion net/ipv6/af_inet6.c
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,9 @@ static int __init inet6_init(void)
err = ip6_route_init();
if (err)
goto ip6_route_fail;
ip6_flowlabel_init();
err = ip6_flowlabel_init();
if (err)
goto ip6_flowlabel_fail;
err = addrconf_init();
if (err)
goto addrconf_fail;
Expand All @@ -874,6 +876,7 @@ static int __init inet6_init(void)

addrconf_fail:
ip6_flowlabel_cleanup();
ip6_flowlabel_fail:
ip6_route_cleanup();
ip6_route_fail:
#ifdef CONFIG_PROC_FS
Expand Down
30 changes: 23 additions & 7 deletions net/ipv6/ip6_flowlabel.c
Original file line number Diff line number Diff line change
Expand Up @@ -692,20 +692,36 @@ static const struct file_operations ip6fl_seq_fops = {
.llseek = seq_lseek,
.release = seq_release_private,
};
#endif

static int ip6_flowlabel_proc_init(struct net *net)
{
if (!proc_net_fops_create(net, "ip6_flowlabel", S_IRUGO, &ip6fl_seq_fops))
return -ENOMEM;
return 0;
}

void ip6_flowlabel_init(void)
static void ip6_flowlabel_proc_fini(struct net *net)
{
#ifdef CONFIG_PROC_FS
proc_net_fops_create(&init_net, "ip6_flowlabel", S_IRUGO, &ip6fl_seq_fops);
proc_net_remove(net, "ip6_flowlabel");
}
#else
static inline int ip6_flowlabel_proc_init(struct net *net)
{
return 0;
}
static inline void ip6_flowlabel_proc_fini(struct net *net)
{
return ;
}
#endif

int ip6_flowlabel_init(void)
{
return ip6_flowlabel_proc_init(&init_net);
}

void ip6_flowlabel_cleanup(void)
{
del_timer(&ip6_fl_gc_timer);
#ifdef CONFIG_PROC_FS
proc_net_remove(&init_net, "ip6_flowlabel");
#endif
ip6_flowlabel_proc_fini(&init_net);
}

0 comments on commit 0a3e78a

Please sign in to comment.