View | Details | Raw Unified | Return to bug 117749
Collapse All | Expand All

(-)linux-2.6.13-SL100_BRANCH/net/xfrm/xfrm_policy.c.old (-2 / +16 lines)
Lines 742-748 Link Here
742
	int err;
742
	int err;
743
	u32 genid;
743
	u32 genid;
744
	u16 family = dst_orig->ops->family;
744
	u16 family = dst_orig->ops->family;
745
	unsigned long timeout = jiffies + 60 * HZ;
746
	int loops = 0;
747
745
restart:
748
restart:
749
	if (unlikely(time_after(jiffies, timeout))) {
750
		printk(KERN_NOTICE "xfrm_lookup bailing out after 60 seconds and %d loops\n", loops);
751
		dump_stack();
752
		err = -EHOSTUNREACH;
753
		goto error_nopol;
754
	}
755
	++loops;
756
746
	genid = atomic_read(&flow_cache_genid);
757
	genid = atomic_read(&flow_cache_genid);
747
	policy = NULL;
758
	policy = NULL;
748
	if (sk && sk->sk_policy[1])
759
	if (sk && sk->sk_policy[1])
Lines 847-853 Link Here
847
			xfrm_pol_put(policy);
858
			xfrm_pol_put(policy);
848
			if (dst)
859
			if (dst)
849
				dst_free(dst);
860
				dst_free(dst);
850
			goto restart;
861
862
			err = -EHOSTUNREACH;
863
			goto error;
851
		}
864
		}
852
		dst->next = policy->bundles;
865
		dst->next = policy->bundles;
853
		policy->bundles = dst;
866
		policy->bundles = dst;
Lines 860-867 Link Here
860
	return 0;
873
	return 0;
861
874
862
error:
875
error:
863
	dst_release(dst_orig);
864
	xfrm_pol_put(policy);
876
	xfrm_pol_put(policy);
877
error_nopol:
878
	dst_release(dst_orig);
865
	*dst_p = NULL;
879
	*dst_p = NULL;
866
	return err;
880
	return err;
867
}
881
}

Return to bug 117749