* if it returns an error!
         */
        if ((rc = cxl_register_afu(afu)))
-               goto err_put1;
+               goto err_put_dev;
 
        if ((rc = cxl_sysfs_afu_add(afu)))
-               goto err_put1;
+               goto err_del_dev;
 
        adapter->afu[afu->slice] = afu;
 
 
        return 0;
 
-err_put1:
+err_del_dev:
+       device_del(&afu->dev);
+err_put_dev:
        pci_deconfigure_afu(afu);
        cxl_debugfs_afu_remove(afu);
-       device_unregister(&afu->dev);
+       put_device(&afu->dev);
        return rc;
 
 err_free_native:
         * even if it returns an error!
         */
        if ((rc = cxl_register_adapter(adapter)))
-               goto err_put1;
+               goto err_put_dev;
 
        if ((rc = cxl_sysfs_adapter_add(adapter)))
-               goto err_put1;
+               goto err_del_dev;
 
        /* Release the context lock as adapter is configured */
        cxl_adapter_context_unlock(adapter);
 
        return adapter;
 
-err_put1:
+err_del_dev:
+       device_del(&adapter->dev);
+err_put_dev:
        /* This should mirror cxl_remove_adapter, except without the
         * sysfs parts
         */
        cxl_debugfs_adapter_remove(adapter);
        cxl_deconfigure_adapter(adapter);
-       device_unregister(&adapter->dev);
+       put_device(&adapter->dev);
        return ERR_PTR(rc);
 
 err_release: