[ofa-general] Re: [PATCH] opensm/osm_state_mgr.c: bug fix in unicast cache

Sasha Khapyorsky sashak at voltaire.com
Wed Nov 19 11:00:59 PST 2008


Hi Yevgeny,

On 11:51 Wed 19 Nov     , Yevgeny Kliteynik wrote:
> Hi Sasha,
> 
> When there are errors during initialization and new
> heavy sweep is forced, unicast cache might hold a
> snapshot of the previous routing, and since there
> might be no *topology* changes, ucast cache will
> apply that cached routing, which might be wrong.
> 
> This patch invalidates cache explicitly if there
> were initialization errors in addition to few other
> cases.
> 
> This fix addresses bug #1398.
> 
> Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
> ---
>  opensm/opensm/osm_state_mgr.c |   16 ++++++++++++----
>  1 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
> index 841438c..d00e8ff 100644
> --- a/opensm/opensm/osm_state_mgr.c
> +++ b/opensm/opensm/osm_state_mgr.c
> @@ -1064,6 +1064,18 @@ static void do_sweep(osm_sm_t * sm)
>  	}
> 
>  	/*
> +	 * Unicast cache should be invalidated if:
> +	 *  - every sweep is a heavy sweep
> +	 *  - there were errors during initialization
> +	 *  - subnet re-route is requested
> +	 */
> +	if (sm->p_subn->opt.use_ucast_cache &&
> +	    (sm->p_subn->opt.force_heavy_sweep ||

Why 'opt.force_heavy_sweep' should be there? It is possible to enforce
heavy sweep without routing cache just by using:

opt.force_heavy_sweep TRUE
opt.use_ucast_cache FALSE

Sasha

> +	     sm->p_subn->subnet_initialization_error ||
> +	     sm->p_subn->force_reroute))
> +		osm_ucast_cache_invalidate(&sm->ucast_mgr);
> +
> +	/*
>  	 * If we don't need to do a heavy sweep and we want to do a reroute,
>  	 * just reroute only.
>  	 */
> @@ -1079,10 +1091,6 @@ static void do_sweep(osm_sm_t * sm)
>  		/* Re-program the switches fully */
>  		sm->p_subn->ignore_existing_lfts = TRUE;
> 
> -		/* we want to re-route, so cache should be invalidated */
> -		if (sm->p_subn->opt.use_ucast_cache)
> -			osm_ucast_cache_invalidate(&sm->ucast_mgr);
> -
>  		osm_ucast_mgr_process(&sm->ucast_mgr);
> 
>  		/* Reset flag */
> -- 
> 1.5.1.4
> 



More information about the general mailing list