recv->header.recv_wc.wc->wr_id = mad_send_wr->wr_id; mad_agent_priv->agent.recv_handler( &mad_agent_priv->agent, &recv->header.recv_wc); 
mad_recv_wc->wc->wr_id = mad_send_wr->wr_id; mad_agent_priv->agent.recv_handler(&mad_agent_priv->agent, mad_recv_wc); 
static void ib_mad_complete_recv(struct ib_mad_agent_private *mad_agent_priv,				 struct ib_mad_private *recv,				 int solicited){	struct ib_mad_send_wr_private *mad_send_wr;	struct ib_mad_send_wc mad_send_wc;	unsigned long flags;	/* Fully reassemble receive before processing */	recv = reassemble_recv(mad_agent_priv, recv);	if (!recv) {		if (atomic_dec_and_test(&mad_agent_priv->refcount))			wake_up(&mad_agent_priv->wait);		return;	}	/* Complete corresponding request */	if (solicited) {		spin_lock_irqsave(&mad_agent_priv->lock, flags);		mad_send_wr = find_send_req(mad_agent_priv,					    recv->mad.mad.mad_hdr.tid);		if (!mad_send_wr) {			spin_unlock_irqrestore(&mad_agent_priv->lock, flags);			ib_free_recv_mad(&recv->header.recv_wc);			if (atomic_dec_and_test(&mad_agent_priv->refcount))				wake_up(&mad_agent_priv->wait);			return;		}		/* Timeout = 0 means that we won't wait for a response */		mad_send_wr->timeout = 0;		spin_unlock_irqrestore(&mad_agent_priv->lock, flags);		/* Defined behavior is to complete response before request */		recv->header.recv_wc.wc->wr_id = mad_send_wr->wr_id;		mad_agent_priv->agent.recv_handler(						&mad_agent_priv->agent,						&recv->header.recv_wc);		atomic_dec(&mad_agent_priv->refcount);		mad_send_wc.status = IB_WC_SUCCESS;		mad_send_wc.vendor_err = 0;		mad_send_wc.wr_id = mad_send_wr->wr_id;		ib_mad_complete_send_wr(mad_send_wr, &mad_send_wc);	} else {		mad_agent_priv->agent.recv_handler(						&mad_agent_priv->agent,						&recv->header.recv_wc);		if (atomic_dec_and_test(&mad_agent_priv->refcount))			wake_up(&mad_agent_priv->wait);	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/4a0754fae8fb5162d1cf4f738d48bb1e8190c09f/mad.c/buggy/drivers/infiniband/core/mad.c