From patchwork Wed Jul 20 13:56:02 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krishna Kumar X-Patchwork-Id: 105694 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 410BEB6F71 for ; Wed, 20 Jul 2011 23:56:34 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751881Ab1GTN4Q (ORCPT ); Wed, 20 Jul 2011 09:56:16 -0400 Received: from e23smtp01.au.ibm.com ([202.81.31.143]:33316 "EHLO e23smtp01.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751616Ab1GTN4P (ORCPT ); Wed, 20 Jul 2011 09:56:15 -0400 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp01.au.ibm.com (8.14.4/8.13.1) with ESMTP id p6KDpbTT006018; Wed, 20 Jul 2011 23:51:37 +1000 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p6KDtZ6d1126518; Wed, 20 Jul 2011 23:55:35 +1000 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p6KDu4H3022434; Wed, 20 Jul 2011 23:56:05 +1000 Received: from krkumar2.in.ibm.com ([9.77.127.138]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p6KDu2lU022413; Wed, 20 Jul 2011 23:56:03 +1000 From: Krishna Kumar To: Rusty Russell , "Michael S. Tsirkin" Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Krishna Kumar , virtualization@lists.linux-foundation.org Date: Wed, 20 Jul 2011 19:26:02 +0530 Message-Id: <20110720135602.18705.21405.sendpatchset@krkumar2.in.ibm.com> Subject: [PATCH repost] Fix panic in virtnet_remove Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fix a panic in virtnet_remove. unregister_netdev has already freed up the netdev (and virtnet_info) due to dev->destructor being set, while virtnet_info is still required. Remove virtnet_free altogether, and move the freeing of the per-cpu statistics from virtnet_free to virtnet_remove. Tested patch below. Signed-off-by: Krishna Kumar Acked-by: Michael S. Tsirkin --- (Michael suggested me to re-post with copy to all maintainers) drivers/net/virtio_net.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff -ruNp org/drivers/net/virtio_net.c new/drivers/net/virtio_net.c --- org/drivers/net/virtio_net.c 2011-07-18 09:14:02.000000000 +0530 +++ new/drivers/net/virtio_net.c 2011-07-18 09:16:35.000000000 +0530 @@ -705,14 +705,6 @@ static void virtnet_netpoll(struct net_d } #endif -static void virtnet_free(struct net_device *dev) -{ - struct virtnet_info *vi = netdev_priv(dev); - - free_percpu(vi->stats); - free_netdev(dev); -} - static int virtnet_open(struct net_device *dev) { struct virtnet_info *vi = netdev_priv(dev); @@ -959,7 +951,6 @@ static int virtnet_probe(struct virtio_d /* Set up network device as normal. */ dev->netdev_ops = &virtnet_netdev; dev->features = NETIF_F_HIGHDMA; - dev->destructor = virtnet_free; SET_ETHTOOL_OPS(dev, &virtnet_ethtool_ops); SET_NETDEV_DEV(dev, &vdev->dev); @@ -1122,6 +1113,7 @@ static void __devexit virtnet_remove(str while (vi->pages) __free_pages(get_a_page(vi, GFP_KERNEL), 0); + free_percpu(vi->stats); free_netdev(vi->dev); }