@@ -1350,7 +1350,7 @@ static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family)
13501350 default :
13511351 BUG ();
13521352 }
1353- xdst = dst_alloc (dst_ops , NULL , 0 , 0 , 0 );
1353+ xdst = dst_alloc (dst_ops , NULL , 0 , DST_OBSOLETE_NONE , 0 );
13541354
13551355 if (likely (xdst )) {
13561356 struct dst_entry * dst = & xdst -> u .dst ;
@@ -1477,7 +1477,7 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy,
14771477 dst1 -> xfrm = xfrm [i ];
14781478 xdst -> xfrm_genid = xfrm [i ]-> genid ;
14791479
1480- dst1 -> obsolete = -1 ;
1480+ dst1 -> obsolete = DST_OBSOLETE_FORCE_CHK ;
14811481 dst1 -> flags |= DST_HOST ;
14821482 dst1 -> lastuse = now ;
14831483
@@ -2219,12 +2219,13 @@ EXPORT_SYMBOL(__xfrm_route_forward);
22192219static struct dst_entry * xfrm_dst_check (struct dst_entry * dst , u32 cookie )
22202220{
22212221 /* Code (such as __xfrm4_bundle_create()) sets dst->obsolete
2222- * to "-1" to force all XFRM destinations to get validated by
2223- * dst_ops->check on every use. We do this because when a
2224- * normal route referenced by an XFRM dst is obsoleted we do
2225- * not go looking around for all parent referencing XFRM dsts
2226- * so that we can invalidate them. It is just too much work.
2227- * Instead we make the checks here on every use. For example:
2222+ * to DST_OBSOLETE_FORCE_CHK to force all XFRM destinations to
2223+ * get validated by dst_ops->check on every use. We do this
2224+ * because when a normal route referenced by an XFRM dst is
2225+ * obsoleted we do not go looking around for all parent
2226+ * referencing XFRM dsts so that we can invalidate them. It
2227+ * is just too much work. Instead we make the checks here on
2228+ * every use. For example:
22282229 *
22292230 * XFRM dst A --> IPv4 dst X
22302231 *
@@ -2234,9 +2235,9 @@ static struct dst_entry *xfrm_dst_check(struct dst_entry *dst, u32 cookie)
22342235 * stale_bundle() check.
22352236 *
22362237 * When a policy's bundle is pruned, we dst_free() the XFRM
2237- * dst which causes it's ->obsolete field to be set to a
2238- * positive non-zero integer . If an XFRM dst has been pruned
2239- * like this, we want to force a new route lookup.
2238+ * dst which causes it's ->obsolete field to be set to
2239+ * DST_OBSOLETE_DEAD . If an XFRM dst has been pruned like
2240+ * this, we want to force a new route lookup.
22402241 */
22412242 if (dst -> obsolete < 0 && !stale_bundle (dst ))
22422243 return dst ;
0 commit comments