svn commit: r303646 - head/sys/ofed/drivers/infiniband/ulp/ipoib

Gleb Smirnoff glebius at FreeBSD.org
Wed Aug 17 02:22:55 UTC 2016


On Tue, Aug 16, 2016 at 05:41:28PM -0700, Mark Johnston wrote:
M> > M> Log:
M> > M>   ipoib: Bound the number of egress mbufs buffered during pathrec lookups.
M> > M>   
M> > M>   In pathological situations where the master subnet manager becomes
M> > M>   unresponsive for an extended period, we may otherwise end up queuing all
M> > M>   of the system's mbufs while waiting for a response to a path record lookup.
M> > M>   
M> > M>   This addresses the same issue as commit 1e85b806f9 in Linux.
M> > M>   
M> > M>   Reviewed by:	cem, ngie
M> > M>   MFC after:	2 weeks
M> > M>   Sponsored by:	EMC / Isilon Storage Division
M> > M> 
M> > M> Modified:
M> > M>   head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
M> > M> 
M> > M> Modified: head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
M> > M> ==============================================================================
M> > M> --- head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c	Mon Aug  1 22:19:23 2016	(r303645)
M> > M> +++ head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c	Mon Aug  1 22:22:11 2016	(r303646)
M> > M> @@ -660,7 +660,13 @@ ipoib_unicast_send(struct mbuf *mb, stru
M> > M>  			new_path = 1;
M> > M>  		}
M> > M>  		if (path) {
M> > M> -			_IF_ENQUEUE(&path->queue, mb);
M> > M> +			if (_IF_QLEN(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE)
M> > M> +				_IF_ENQUEUE(&path->queue, mb);
M> > M> +			else {
M> > M> +				if_inc_counter(priv->dev, IFCOUNTER_OERRORS, 1);
M> > M> +				m_freem(mb);
M> > M> +			}
M> > 
M> > Shouldn't that be IFCOUNTER_ODROPS?
M> 
M> I'm not sure. I used IFCOUNTER_OERRORS to be consistent with other error
M> cases in this function. This error case doesn't represent the normal
M> source of outbound packet drops but rather indicates that a key routing
M> agent on the network is not responding. OQDROPS seems like it's
M> specifically for the case that we can't buffer packets because the
M> transmitter isn't keeping up.

I see. The fact that this is an if_queue has confused me. I expected that
it is an ifqueue belonging to an ifnet.

btw, may be this ifqueue can be reduced to mbufq.

-- 
Totus tuus, Glebius.


More information about the svn-src-all mailing list