if (ret)
                return ret;
 
-       ret = cache_tag_assign_domain(domain, dev, IOMMU_NO_PASID);
-       if (ret) {
-               domain_detach_iommu(domain, iommu);
-               return ret;
-       }
-
        info->domain = domain;
        spin_lock_irqsave(&domain->lock, flags);
        list_add(&info->link, &domain->devices);
        else
                ret = intel_pasid_setup_second_level(iommu, domain, dev, IOMMU_NO_PASID);
 
-       if (ret) {
-               device_block_translation(dev);
-               return ret;
-       }
+       if (ret)
+               goto out_block_translation;
 
        if (sm_supported(info->iommu) || !domain_type_is_si(info->domain))
                iommu_enable_pci_caps(info);
 
+       ret = cache_tag_assign_domain(domain, dev, IOMMU_NO_PASID);
+       if (ret)
+               goto out_block_translation;
+
        return 0;
+
+out_block_translation:
+       device_block_translation(dev);
+       return ret;
 }
 
 /**