PCI: Fix /sys warning when sriov enabled and card is hot removed
authorYinghai Lu <yinghai@kernel.org>
Sun, 5 Feb 2012 06:55:01 +0000 (22:55 -0800)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 17 Feb 2012 17:22:03 +0000 (09:22 -0800)
sysfs is a bit stricter now and emits warnings in more cases.

For SRIOV hotplug, we are calling pci_stop_dev() for each VF first
(after we update pci_stop_bus_devices) which remove each VF subdir.  So
double check the VF dir in /sys before trying to remove the physfn link.

Signed-of-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/iov.c

index 0dab5ecf61bb26ad1c7b96684f56b52e7442928d..687b3c8e8e3bd9e28f00c52cdaa9d63857479304 100644 (file)
@@ -173,7 +173,13 @@ static void virtfn_remove(struct pci_dev *dev, int id, int reset)
 
        sprintf(buf, "virtfn%u", id);
        sysfs_remove_link(&dev->dev.kobj, buf);
-       sysfs_remove_link(&virtfn->dev.kobj, "physfn");
+       /*
+        * pci_stop_dev() could have been called for this virtfn already,
+        * so the directory for the virtfn may have been removed before.
+        * Double check to avoid spurious sysfs warnings.
+        */
+       if (virtfn->dev.kobj.sd)
+               sysfs_remove_link(&virtfn->dev.kobj, "physfn");
 
        mutex_lock(&iov->dev->sriov->lock);
        pci_remove_bus_device(virtfn);