Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Aug 2016 17:41:28 -0700
From:      Mark Johnston <markj@FreeBSD.org>
To:        Gleb Smirnoff <glebius@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r303646 - head/sys/ofed/drivers/infiniband/ulp/ipoib
Message-ID:  <20160817004128.GB94062@wkstn-mjohnston.west.isilon.com>
In-Reply-To: <20160817000953.GB1069@FreeBSD.org>
References:  <201608012222.u71MMB4E018482@repo.freebsd.org> <20160817000953.GB1069@FreeBSD.org>

index | next in thread | previous in thread | raw e-mail

On Tue, Aug 16, 2016 at 05:09:53PM -0700, Gleb Smirnoff wrote:
>   Mark,
> 
> On Mon, Aug 01, 2016 at 10:22:11PM +0000, Mark Johnston wrote:
> M> Author: markj
> M> Date: Mon Aug  1 22:22:11 2016
> M> New Revision: 303646
> M> URL: https://svnweb.freebsd.org/changeset/base/303646
> M> 
> M> Log:
> M>   ipoib: Bound the number of egress mbufs buffered during pathrec lookups.
> M>   
> M>   In pathological situations where the master subnet manager becomes
> M>   unresponsive for an extended period, we may otherwise end up queuing all
> M>   of the system's mbufs while waiting for a response to a path record lookup.
> M>   
> M>   This addresses the same issue as commit 1e85b806f9 in Linux.
> M>   
> M>   Reviewed by:	cem, ngie
> M>   MFC after:	2 weeks
> M>   Sponsored by:	EMC / Isilon Storage Division
> M> 
> M> Modified:
> M>   head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
> M> 
> M> Modified: head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
> M> ==============================================================================
> M> --- head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c	Mon Aug  1 22:19:23 2016	(r303645)
> M> +++ head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c	Mon Aug  1 22:22:11 2016	(r303646)
> M> @@ -660,7 +660,13 @@ ipoib_unicast_send(struct mbuf *mb, stru
> M>  			new_path = 1;
> M>  		}
> M>  		if (path) {
> M> -			_IF_ENQUEUE(&path->queue, mb);
> M> +			if (_IF_QLEN(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE)
> M> +				_IF_ENQUEUE(&path->queue, mb);
> M> +			else {
> M> +				if_inc_counter(priv->dev, IFCOUNTER_OERRORS, 1);
> M> +				m_freem(mb);
> M> +			}
> 
> Shouldn't that be IFCOUNTER_ODROPS?

I'm not sure. I used IFCOUNTER_OERRORS to be consistent with other error
cases in this function. This error case doesn't represent the normal
source of outbound packet drops but rather indicates that a key routing
agent on the network is not responding. OQDROPS seems like it's
specifically for the case that we can't buffer packets because the
transmitter isn't keeping up.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160817004128.GB94062>