From owner-freebsd-net@FreeBSD.ORG Tue Jan 27 20:06:16 2015 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 9C1E2BA3; Tue, 27 Jan 2015 20:06:16 +0000 (UTC) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0147.outbound.protection.outlook.com [157.56.110.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 093CEED; Tue, 27 Jan 2015 20:06:15 +0000 (UTC) Received: from CO2PR05MB762.namprd05.prod.outlook.com (10.141.227.14) by CO2PR05MB634.namprd05.prod.outlook.com (10.141.199.17) with Microsoft SMTP Server (TLS) id 15.1.65.19; Tue, 27 Jan 2015 19:51:51 +0000 Received: from CO2PR05MB761.namprd05.prod.outlook.com (10.141.227.13) by CO2PR05MB762.namprd05.prod.outlook.com (10.141.227.14) with Microsoft SMTP Server (TLS) id 15.1.65.19; Tue, 27 Jan 2015 19:51:49 +0000 Received: from CO2PR05MB761.namprd05.prod.outlook.com ([10.141.227.13]) by CO2PR05MB761.namprd05.prod.outlook.com ([10.141.227.13]) with mapi id 15.01.0065.013; Tue, 27 Jan 2015 19:51:49 +0000 From: Sreekanth Rupavatharam To: hiren panchasara Subject: Re: Double cleanup in igb_attach Thread-Topic: Double cleanup in igb_attach Thread-Index: AQHQOcQ8M6DG1/D37kKlfeofCj44QJzUW0EA//+AdgA= Date: Tue, 27 Jan 2015 19:51:49 +0000 Message-ID: References: <20150127192814.GA63990@strugglingcoder.info> In-Reply-To: <20150127192814.GA63990@strugglingcoder.info> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.4.7.141117 x-originating-ip: [66.129.239.13] authentication-results: strugglingcoder.info; dkim=none (message not signed) header.d=none;strugglingcoder.info; dmarc=none action=none header.from=juniper.net; x-dmarcaction-test: None x-microsoft-antispam: BCL:0; PCL:0; RULEID:(3005004); SRVR:CO2PR05MB762; UriScan:; x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:;SRVR:CO2PR05MB762; x-forefront-prvs: 046985391D x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(164054003)(377454003)(479174004)(24454002)(46102003)(110136001)(92566002)(2656002)(19580395003)(54356999)(76176999)(62966003)(77156002)(102836002)(19580405001)(83506001)(66066001)(50986999)(77096005)(2950100001)(2900100001)(40100003)(122556002)(16236675004)(106116001)(86362001)(99286002)(36756003)(87936001)(6606295002); DIR:OUT; SFP:1102; SCL:1; SRVR:CO2PR05MB762; H:CO2PR05MB761.namprd05.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; MIME-Version: 1.0 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Jan 2015 19:51:49.5982 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR05MB762 X-Microsoft-Antispam: BCL:0;PCL:0;RULEID:;SRVR:CO2PR05MB634; X-OriginatorOrg: juniper.net Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.18-1 Cc: "jfv@freebsd.org" , "freebsd-net@freebsd.org" X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jan 2015 20:06:16 -0000 Hiren, Can you help commit this? Index: if_igb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- if_igb.c (revision 298053) +++ if_igb.c (working copy) @@ -723,7 +723,8 @@ igb_attach(device_t dev) return (0); err_late: - igb_detach(dev); + if(igb_detach(dev) =3D=3D 0) /* igb_detach did the cleanup */ + return(error); igb_free_transmit_structures(adapter); igb_free_receive_structures(adapter); igb_release_hw_control(adapter); -- Thanks, Sreekanth On 1/27/15, 11:28 AM, "hiren panchasara" > wrote: + Jack On Tue, Jan 27, 2015 at 12:00:19AM +0000, Sreekanth Rupavatharam wrote: Apologies if this is not the right forum. In igb_attach function, we have t= his code. err_late: igb_detach(dev); igb_free_transmit_structures(adapter); igb_free_receive_structures(adapter); igb_release_hw_control(adapter); err_pci: igb_free_pci_resources(adapter); if (adapter->ifp !=3D NULL) if_free(adapter->ifp); free(adapter->mta, M_DEVBUF); IGB_CORE_LOCK_DESTROY(adapter); The problem is that igb_detach also does the same cleanup in it?s body. Onl= y exception is this case where it just returns EBUSY /* Make sure VLANS are not using driver */ if (if_vlantrunkinuse(ifp)) { device_printf(dev,"Vlan in use, detach first\n"); return (EBUSY); } I think the code in igb_attach should be changed to free up resources only = if the igb_detach returns an error. Here?s the patch for it. Index: if_igb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- if_igb.c (revision 298025) +++ if_igb.c (working copy) @@ -723,7 +723,8 @@ igb_attach(device_t dev) return (0); err_late: - igb_detach(dev); + if(igb_detach(dev) =3D=3D 0) /* igb_detach did the cleanup */ + return; igb_free_transmit_structures(adapter); Can anyone comment on it and tell me if my understanding is incorrect? Seems reasonable to me at the first glance. We need to call IGB_CORE_LOCK_DESTROY(adapter) before returning though. cheers, Hiren