Skip to content

Commit

Permalink
[IPV6]: ROUTE: Split up rt6_cow() for future changes.
Browse files Browse the repository at this point in the history
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
YOSHIFUJI Hideaki authored and David S. Miller committed Mar 21, 2006
1 parent c4fd30e commit 95a9a5b
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/*
Expand Down Expand Up @@ -435,18 +434,29 @@ 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;
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(&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() \
Expand Down

0 comments on commit 95a9a5b

Please sign in to comment.