From: Alan Cox pci_find_device is not refcounting and should be getting killed off. Signed-off-by: Alan Cox Cc: Greg KH Signed-off-by: Andrew Morton --- sound/oss/via82cxxx_audio.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff -puN sound/oss/via82cxxx_audio.c~pci-via82cxxx_audio-use-pci_get_device sound/oss/via82cxxx_audio.c --- a/sound/oss/via82cxxx_audio.c~pci-via82cxxx_audio-use-pci_get_device +++ a/sound/oss/via82cxxx_audio.c @@ -1547,7 +1547,7 @@ static int via_mixer_open (struct inode DPRINTK ("ENTER\n"); - while ((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { + while ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { drvr = pci_dev_driver (pdev); if (drvr == &via_driver) { assert (pci_get_drvdata (pdev) != NULL); @@ -1562,6 +1562,7 @@ static int via_mixer_open (struct inode return -ENODEV; match: + pci_dev_put(pdev); file->private_data = card->ac97; DPRINTK ("EXIT, returning 0\n"); @@ -3245,7 +3246,7 @@ static int via_dsp_open (struct inode *i } card = NULL; - while ((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { + while ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) { drvr = pci_dev_driver (pdev); if (drvr == &via_driver) { assert (pci_get_drvdata (pdev) != NULL); @@ -3264,6 +3265,7 @@ static int via_dsp_open (struct inode *i return -ENODEV; match: + pci_dev_put(pdev); if (nonblock) { if (!mutex_trylock(&card->open_mutex)) { DPRINTK ("EXIT, returning -EAGAIN\n"); _