diff options
Diffstat (limited to 'net/ipv6/ip6mr.c')
| -rw-r--r-- | net/ipv6/ip6mr.c | 56 | 
1 files changed, 20 insertions, 36 deletions
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 298fd8b6ed17..0d0f0053bb11 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -180,7 +180,8 @@ static const struct nla_policy ip6mr_rule_policy[FRA_MAX + 1] = {  };  static int ip6mr_rule_configure(struct fib_rule *rule, struct sk_buff *skb, -				struct fib_rule_hdr *frh, struct nlattr **tb) +				struct fib_rule_hdr *frh, struct nlattr **tb, +				struct netlink_ext_ack *extack)  {  	return 0;  } @@ -227,8 +228,8 @@ static int __net_init ip6mr_rules_init(struct net *net)  	INIT_LIST_HEAD(&net->ipv6.mr6_tables);  	mrt = ip6mr_new_table(net, RT6_TABLE_DFLT); -	if (!mrt) { -		err = -ENOMEM; +	if (IS_ERR(mrt)) { +		err = PTR_ERR(mrt);  		goto err1;  	} @@ -301,8 +302,13 @@ static int ip6mr_fib_lookup(struct net *net, struct flowi6 *flp6,  static int __net_init ip6mr_rules_init(struct net *net)  { -	net->ipv6.mrt6 = ip6mr_new_table(net, RT6_TABLE_DFLT); -	return net->ipv6.mrt6 ? 0 : -ENOMEM; +	struct mr_table *mrt; + +	mrt = ip6mr_new_table(net, RT6_TABLE_DFLT); +	if (IS_ERR(mrt)) +		return PTR_ERR(mrt); +	net->ipv6.mrt6 = mrt; +	return 0;  }  static void __net_exit ip6mr_rules_exit(struct net *net) @@ -439,19 +445,6 @@ static const struct seq_operations ip6mr_vif_seq_ops = {  	.show  = ip6mr_vif_seq_show,  }; -static int ip6mr_vif_open(struct inode *inode, struct file *file) -{ -	return seq_open_net(inode, file, &ip6mr_vif_seq_ops, -			    sizeof(struct mr_vif_iter)); -} - -static const struct file_operations ip6mr_vif_fops = { -	.open    = ip6mr_vif_open, -	.read    = seq_read, -	.llseek  = seq_lseek, -	.release = seq_release_net, -}; -  static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)  {  	struct net *net = seq_file_net(seq); @@ -512,19 +505,6 @@ static const struct seq_operations ipmr_mfc_seq_ops = {  	.stop  = mr_mfc_seq_stop,  	.show  = ipmr_mfc_seq_show,  }; - -static int ipmr_mfc_open(struct inode *inode, struct file *file) -{ -	return seq_open_net(inode, file, &ipmr_mfc_seq_ops, -			    sizeof(struct mr_mfc_iter)); -} - -static const struct file_operations ip6mr_mfc_fops = { -	.open    = ipmr_mfc_open, -	.read    = seq_read, -	.llseek  = seq_lseek, -	.release = seq_release_net, -};  #endif  #ifdef CONFIG_IPV6_PIMSM_V2 @@ -1316,9 +1296,11 @@ static int __net_init ip6mr_net_init(struct net *net)  #ifdef CONFIG_PROC_FS  	err = -ENOMEM; -	if (!proc_create("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_fops)) +	if (!proc_create_net("ip6_mr_vif", 0, net->proc_net, &ip6mr_vif_seq_ops, +			sizeof(struct mr_vif_iter)))  		goto proc_vif_fail; -	if (!proc_create("ip6_mr_cache", 0, net->proc_net, &ip6mr_mfc_fops)) +	if (!proc_create_net("ip6_mr_cache", 0, net->proc_net, &ipmr_mfc_seq_ops, +			sizeof(struct mr_mfc_iter)))  		goto proc_cache_fail;  #endif @@ -1757,9 +1739,11 @@ int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, uns  		rtnl_lock();  		ret = 0; -		if (!ip6mr_new_table(net, v)) -			ret = -ENOMEM; -		raw6_sk(sk)->ip6mr_table = v; +		mrt = ip6mr_new_table(net, v); +		if (IS_ERR(mrt)) +			ret = PTR_ERR(mrt); +		else +			raw6_sk(sk)->ip6mr_table = v;  		rtnl_unlock();  		return ret;  	}  | 
