From owner-freebsd-bugs@FreeBSD.ORG Mon Sep 19 06:30:23 2005 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9F7D116A41F for ; Mon, 19 Sep 2005 06:30:23 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6CFA643D46 for ; Mon, 19 Sep 2005 06:30:23 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.3/8.13.3) with ESMTP id j8J6UNUs081942 for ; Mon, 19 Sep 2005 06:30:23 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.3/8.13.1/Submit) id j8J6UNeJ081937; Mon, 19 Sep 2005 06:30:23 GMT (envelope-from gnats) Date: Mon, 19 Sep 2005 06:30:23 GMT Message-Id: <200509190630.j8J6UNeJ081937@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Ruslan Ermilov Cc: Subject: Re: kern/86306: [patch] if_em.c locks up while trying to send a highly fragmented packet X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ruslan Ermilov List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Sep 2005 06:30:23 -0000 The following reply was made to PR kern/86306; it has been noted by GNATS. From: Ruslan Ermilov To: Dmitrij Tejblum Cc: FreeBSD-gnats-submit@freebsd.org Subject: Re: kern/86306: [patch] if_em.c locks up while trying to send a highly fragmented packet Date: Mon, 19 Sep 2005 09:29:26 +0300 Hi Dmitrij, On Sun, Sep 18, 2005 at 11:25:35PM +0400, Dmitrij Tejblum wrote: > When em_encap() tries to send a very long mbuf chain (i.e. more than > EM_MAX_SCATTER == 64 mbufs), bus_dmamap_load_mbuf_sg() may fail with EFBIG. > Then em_encap() fail, the packet is not sent and left in the output queue, > and thus no futher transmission is possible. > > Some other driver handle similar condition with m_defrag(9) function > (which is intended for this purpose). > Can you please modify your patch as follows: 1) Count how much fragments are in the packet in em_encap() first, and do m_defrag() if it exceeeds EM_MAX_SCATTER, like in if_dc.c. If it is still EFBIG after that and bus_dmamap_load_mbuf_sg(), then free it as you do to prevent re-enqueue. 2) Put BPF processing back to em_start_locked(). 3) Pull up to the HEAD version of the driver. Cheers, -- Ruslan Ermilov ru@FreeBSD.org FreeBSD committer