From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark McLoughlin Subject: [PATCH] virtio: make PCI devices take a virtio_pci module ref Date: Thu, 04 Dec 2008 12:44:31 +0000 Message-ID: <1228394671.3732.77.camel@blaa> Reply-To: Mark McLoughlin Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: linux-kernel , kvm , Anthony Liguori , Michael Tokarev To: Rusty Russell Return-path: Received: from mx2.redhat.com ([66.187.237.31]:57213 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752019AbYLDMqJ (ORCPT ); Thu, 4 Dec 2008 07:46:09 -0500 Sender: kvm-owner@vger.kernel.org List-ID: Nothing takes a ref on virtio_pci, so even if you have devices in use, rmmod will attempt to unload the module. Fix by simply making each device take a ref on the module. Signed-off-by: Mark McLoughlin Reported-by: Michael Tokarev --- drivers/virtio/virtio_pci.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index c7dc37c..147a17f 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c @@ -322,6 +322,9 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, return -ENODEV; } + if (!try_module_get(THIS_MODULE)) + return -ENODEV; + /* allocate our structure and fill it out */ vp_dev = kzalloc(sizeof(struct virtio_pci_device), GFP_KERNEL); if (vp_dev == NULL) @@ -393,6 +396,7 @@ static void __devexit virtio_pci_remove(struct pci_dev *pci_dev) pci_release_regions(pci_dev); pci_disable_device(pci_dev); kfree(vp_dev); + module_put(THIS_MODULE); } #ifdef CONFIG_PM -- 1.6.0.3