On 06:57 Wed 16 Dec     , Hal Rosenstock wrote:
> 
> opensm/osm_vl15intf.c: Fix transaction ID printing in vl15_send_mad
> 
> Rather than reverting commit 546399c3b983cdfe7adf4bd0b179358744603478,
> another alternative is to save off the transaction ID prior to
> sending the MAD.
> 
> This resolves OpenSM crash when accessing fields of mad that has already
> been returned to the pool.
> 
> Signed-off-by: Hal Rosenstock <[email protected]>
> ---
> diff --git a/opensm/opensm/osm_vl15intf.c b/opensm/opensm/osm_vl15intf.c
> index cc3ff33..ec7dadf 100644
> --- a/opensm/opensm/osm_vl15intf.c
> +++ b/opensm/opensm/osm_vl15intf.c
> @@ -3,6 +3,7 @@
>   * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
>   * Copyright (c) 2002-2006 Mellanox Technologies LTD. All rights reserved.
>   * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
> + * Copyright (c) 2009 HNR Consulting. All rights reserved.
>   *
>   * This software is available to you under a choice of one of two
>   * licenses.  You may choose to be licensed under the terms of the GNU
> @@ -57,6 +58,7 @@
>  static void vl15_send_mad(osm_vl15_t * p_vl, osm_madw_t * p_madw)
>  {
>       ib_api_status_t status;
> +     ib_net64_t trans_id;
>  
>       /*
>          Non-response-expected mads are not throttled on the wire
> @@ -76,6 +78,7 @@ static void vl15_send_mad(osm_vl15_t * p_vl, osm_madw_t * 
> p_madw)
>               cl_atomic_inc(&p_vl->p_stats->qp0_unicasts_sent);
>  
>       cl_atomic_inc(&p_vl->p_stats->qp0_mads_sent);
> +     trans_id = p_madw->p_mad->trans_id;

This variable would make any sense only in case when appropriate log
level is set. I think the better way to solve it is to revert the
original patch and to print transaction id inside osm_vendor_send()
(there is an error message anyway) before madw is freed.

Sasha

>  
>       status = osm_vendor_send(osm_madw_get_bind_handle(p_madw),
>                                p_madw, p_madw->resp_expected);
> @@ -93,7 +96,7 @@ static void vl15_send_mad(osm_vl15_t * p_vl, osm_madw_t * 
> p_madw)
>  
>       OSM_LOG(p_vl->p_log, OSM_LOG_ERROR, "ERR 3E03: "
>               "MAD send failed (%s), TID 0x%" PRIx64 "\n",
> -             ib_get_err_str(status), cl_ntoh64(p_madw->p_mad->trans_id));
> +             ib_get_err_str(status), cl_ntoh64(trans_id));
>  
>       /*
>          The MAD was never successfully sent, so
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to