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

Commit 95a9a5ba authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller
Browse files

[IPV6]: ROUTE: Split up rt6_cow() for future changes.

parent c4fd30eb
Loading
Loading
Loading
Loading
+21 −11
Original line number Diff line number Diff line
@@ -401,10 +401,9 @@ int ip6_ins_rt(struct rt6_info *rt, struct nlmsghdr *nlh,
   with dst->error set to errno value.
 */

static struct rt6_info *rt6_cow(struct rt6_info *ort, struct in6_addr *daddr,
				struct in6_addr *saddr, struct netlink_skb_parms *req)
static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, struct in6_addr *daddr,
				      struct in6_addr *saddr)
{
	int err;
	struct rt6_info *rt;

	/*
@@ -435,20 +434,31 @@ static struct rt6_info *rt6_cow(struct rt6_info *ort, struct in6_addr *daddr,

		rt->rt6i_nexthop = ndisc_get_neigh(rt->rt6i_dev, &rt->rt6i_gateway);

		dst_hold(&rt->u.dst);
	}

		err = ip6_ins_rt(rt, NULL, NULL, req);
		if (err == 0)
	return rt;
}

		rt->u.dst.error = err;
static struct rt6_info *rt6_cow(struct rt6_info *ort, struct in6_addr *daddr,
				struct in6_addr *saddr, struct netlink_skb_parms *req)
{
	struct rt6_info *rt = rt6_alloc_cow(ort, daddr, saddr);
	int err;

		return rt;
	}
	if (!rt) {
		dst_hold(&ip6_null_entry.u.dst);
		return &ip6_null_entry;
	}

	dst_hold(&rt->u.dst);

	err = ip6_ins_rt(rt, NULL, NULL, req);
	if (err)
		rt->u.dst.error = err;

	return rt;
}

#define BACKTRACK() \
if (rt == &ip6_null_entry && strict) { \
       while ((fn = fn->parent) != NULL) { \