if ((dst_gc_timer_expires += dst_gc_timer_inc) > DST_GC_MAX) dst_gc_timer_expires = DST_GC_MAX; dst_gc_timer_inc += DST_GC_INC; 
if (!work_performed) { if ((dst_gc_timer_expires += dst_gc_timer_inc) > DST_GC_MAX) dst_gc_timer_expires = DST_GC_MAX; dst_gc_timer_inc += DST_GC_INC; } else { dst_gc_timer_inc = DST_GC_INC; dst_gc_timer_expires = DST_GC_MIN; } 
static void dst_run_gc(unsigned long dummy){	int    delayed = 0;	struct dst_entry * dst, **dstp;	if (!spin_trylock(&dst_lock)) {		mod_timer(&dst_gc_timer, jiffies + HZ/10);		return;	}	del_timer(&dst_gc_timer);	dstp = &dst_garbage_list;	while ((dst = *dstp) != NULL) {		if (atomic_read(&dst->__refcnt)) {			dstp = &dst->next;			delayed++;			continue;		}		*dstp = dst->next;		dst = dst_destroy(dst);		if (dst) {			/* NOHASH and still referenced. Unless it is already			 * on gc list, invalidate it and add to gc list.			 *			 * Note: this is temporary. Actually, NOHASH dst's			 * must be obsoleted when parent is obsoleted.			 * But we do not have state "obsoleted, but			 * referenced by parent", so it is right.			 */			if (dst->obsolete > 1)				continue;			___dst_free(dst);			dst->next = *dstp;			*dstp = dst;			dstp = &dst->next;		}	}	if (!dst_garbage_list) {		dst_gc_timer_inc = DST_GC_MAX;		goto out;	}	if ((dst_gc_timer_expires += dst_gc_timer_inc) > DST_GC_MAX)		dst_gc_timer_expires = DST_GC_MAX;	dst_gc_timer_inc += DST_GC_INC;	dst_gc_timer.expires = jiffies + dst_gc_timer_expires;#if RT_CACHE_DEBUG >= 2	printk("dst_total: %d/%d %ld\n",	       atomic_read(&dst_total), delayed,  dst_gc_timer_expires);#endif	add_timer(&dst_gc_timer);out:	spin_unlock(&dst_lock);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f0098f7863f814a5adc0b9cb271605d063cad7fa/dst.c/clean/net/core/dst.c