if (ret)
                return ret;
 
-       map = (struct virtio_iommu_req_map) {
-               .head.type      = VIRTIO_IOMMU_T_MAP,
-               .domain         = cpu_to_le32(vdomain->id),
-               .virt_start     = cpu_to_le64(iova),
-               .phys_start     = cpu_to_le64(paddr),
-               .virt_end       = cpu_to_le64(end),
-               .flags          = cpu_to_le32(flags),
-       };
-
-       if (!vdomain->nr_endpoints)
-               return 0;
+       if (vdomain->nr_endpoints) {
+               map = (struct virtio_iommu_req_map) {
+                       .head.type      = VIRTIO_IOMMU_T_MAP,
+                       .domain         = cpu_to_le32(vdomain->id),
+                       .virt_start     = cpu_to_le64(iova),
+                       .phys_start     = cpu_to_le64(paddr),
+                       .virt_end       = cpu_to_le64(end),
+                       .flags          = cpu_to_le32(flags),
+               };
 
-       ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map));
-       if (ret)
-               viommu_del_mappings(vdomain, iova, end);
-       else if (mapped)
+               ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map));
+               if (ret) {
+                       viommu_del_mappings(vdomain, iova, end);
+                       return ret;
+               }
+       }
+       if (mapped)
                *mapped = size;
 
-       return ret;
+       return 0;
 }
 
 static size_t viommu_unmap_pages(struct iommu_domain *domain, unsigned long iova,