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

Commit 0a3e78ac authored by Daniel Lezcano's avatar Daniel Lezcano Committed by David S. Miller
Browse files

[IPV6]: make flowlabel to return an error



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: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 51602b2a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
+4 −1
Original line number Diff line number Diff line
@@ -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;
@@ -874,6 +876,7 @@ out:

addrconf_fail:
	ip6_flowlabel_cleanup();
ip6_flowlabel_fail:
	ip6_route_cleanup();
ip6_route_fail:
#ifdef CONFIG_PROC_FS
+23 −7
Original line number Diff line number Diff line
@@ -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);
}