&physfn->sriov->subsystem_device);
 }
 
+int pci_iov_sysfs_link(struct pci_dev *dev,
+               struct pci_dev *virtfn, int id)
+{
+       char buf[VIRTFN_ID_LEN];
+       int rc;
+
+       sprintf(buf, "virtfn%u", id);
+       rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
+       if (rc)
+               goto failed;
+       rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
+       if (rc)
+               goto failed1;
+
+       kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
+
+       return 0;
+
+failed1:
+       sysfs_remove_link(&dev->dev.kobj, buf);
+failed:
+       return rc;
+}
+
 int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 {
        int i;
        int rc = -ENOMEM;
        u64 size;
-       char buf[VIRTFN_ID_LEN];
        struct pci_dev *virtfn;
        struct resource *res;
        struct pci_sriov *iov = dev->sriov;
        }
 
        pci_device_add(virtfn, virtfn->bus);
-
-       sprintf(buf, "virtfn%u", id);
-       rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
+       rc = pci_iov_sysfs_link(dev, virtfn, id);
        if (rc)
                goto failed1;
-       rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
-       if (rc)
-               goto failed2;
-
-       kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
        pci_bus_add_device(virtfn);
 
        return 0;
 
-failed2:
-       sysfs_remove_link(&dev->dev.kobj, buf);
 failed1:
        pci_stop_and_remove_bus_device(virtfn);
        pci_dev_put(dev);
 
 
 int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
 void pci_disable_sriov(struct pci_dev *dev);
+
+int pci_iov_sysfs_link(struct pci_dev *dev, struct pci_dev *virtfn, int id);
 int pci_iov_add_virtfn(struct pci_dev *dev, int id);
 void pci_iov_remove_virtfn(struct pci_dev *dev, int id);
 int pci_num_vf(struct pci_dev *dev);
 }
 static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
 { return -ENODEV; }
+
+static inline int pci_iov_sysfs_link(struct pci_dev *dev,
+                                    struct pci_dev *virtfn, int id)
+{
+       return -ENODEV;
+}
 static inline int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 {
        return -ENOSYS;