iommu/vt-d: Unlink device if failed to add to group

If the device fails to be added to the group, make sure to unlink the
reference before returning.

Signed-off-by: Jon Derrick <jonathan.derrick@intel.com>
Fixes: 39ab9555c2411 ("iommu: Add sysfs bindings for struct iommu_device")
Acked-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>

authored by Jon Derrick and committed by Joerg Roedel f78947c4 7d4e6ccd

Changed files
+10 -3
drivers
+10 -3
drivers/iommu/intel-iommu.c
··· 5624 5624 5625 5625 group = iommu_group_get_for_dev(dev); 5626 5626 5627 - if (IS_ERR(group)) 5628 - return PTR_ERR(group); 5627 + if (IS_ERR(group)) { 5628 + ret = PTR_ERR(group); 5629 + goto unlink; 5630 + } 5629 5631 5630 5632 iommu_group_put(group); 5631 5633 ··· 5653 5651 if (!get_private_domain_for_dev(dev)) { 5654 5652 dev_warn(dev, 5655 5653 "Failed to get a private domain.\n"); 5656 - return -ENOMEM; 5654 + ret = -ENOMEM; 5655 + goto unlink; 5657 5656 } 5658 5657 5659 5658 dev_info(dev, ··· 5669 5666 } 5670 5667 5671 5668 return 0; 5669 + 5670 + unlink: 5671 + iommu_device_unlink(&iommu->iommu, dev); 5672 + return ret; 5672 5673 } 5673 5674 5674 5675 static void intel_iommu_remove_device(struct device *dev)