if (x->props.flags & XFRM_STATE_NOECN)
                dsfield &= ~INET_ECN_MASK;
        ipv6_change_dsfield(top_iph, 0, dsfield);
-       top_iph->hop_limit = ip6_dst_hoplimit(dst->child);
+       top_iph->hop_limit = ip6_dst_hoplimit(xfrm_dst_child(dst));
        top_iph->saddr = *(struct in6_addr *)&x->props.saddr;
        top_iph->daddr = *(struct in6_addr *)&x->id.daddr;
        return 0;
 
                        in6_dev_put(xdst->u.rt6.rt6i_idev);
                        xdst->u.rt6.rt6i_idev = loopback_idev;
                        in6_dev_hold(loopback_idev);
-                       xdst = (struct xfrm_dst *)xdst->u.dst.child;
+                       xdst = (struct xfrm_dst *)xfrm_dst_child(&xdst->u.dst);
                } while (xdst->u.dst.xfrm);
 
                __in6_dev_put(loopback_idev);
 
        xfrm_init_path((struct xfrm_dst *)dst0, dst, nfheader_len);
        xfrm_init_pmtu(dst_prev);
 
-       for (dst_prev = dst0; dst_prev != dst; dst_prev = dst_prev->child) {
+       for (dst_prev = dst0; dst_prev != dst; dst_prev = xfrm_dst_child(dst_prev)) {
                struct xfrm_dst *xdst = (struct xfrm_dst *)dst_prev;
 
                err = xfrm_fill_dst(xdst, dev, fl);
        for (i = 0; i < num; i++) {
                if (!dst || dst->xfrm != xfrm[i])
                        return false;
-               dst = dst->child;
+               dst = xfrm_dst_child(dst);
        }
 
        return xfrm_bundle_ok(xdst);
 
 void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
 {
-       while ((dst = dst->child) && dst->xfrm && dst->dev == dev) {
+       while ((dst = xfrm_dst_child(dst)) && dst->xfrm && dst->dev == dev) {
                dst->dev = dev_net(dev)->loopback_dev;
                dev_hold(dst->dev);
                dev_put(dev);
                struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
                u32 pmtu, route_mtu_cached;
 
-               pmtu = dst_mtu(dst->child);
+               pmtu = dst_mtu(xfrm_dst_child(dst));
                xdst->child_mtu_cached = pmtu;
 
                pmtu = xfrm_state_mtu(dst->xfrm, pmtu);
                    xdst->policy_genid != atomic_read(&xdst->pols[0]->genid))
                        return 0;
 
-               mtu = dst_mtu(dst->child);
+               mtu = dst_mtu(xfrm_dst_child(dst));
                if (xdst->child_mtu_cached != mtu) {
                        last = xdst;
                        xdst->child_mtu_cached = mtu;
                        xdst->route_mtu_cached = mtu;
                }
 
-               dst = dst->child;
+               dst = xfrm_dst_child(dst);
        } while (dst->xfrm);
 
        if (likely(!last))
 {
        const struct dst_entry *path = dst->path;
 
-       for (; dst != path; dst = dst->child) {
+       for (; dst != path; dst = xfrm_dst_child(dst)) {
                const struct xfrm_state *xfrm = dst->xfrm;
 
                if (xfrm->props.mode == XFRM_MODE_TRANSPORT)