kref_put(&peer_device->connection->kref, drbd_destroy_connection);
                kfree(peer_device);
        }
+       if (device->submit.wq)
+               destroy_workqueue(device->submit.wq);
        kfree(device);
        kref_put(&resource->kref, drbd_destroy_resource);
 }
 
        err = add_disk(disk);
        if (err)
-               goto out_idr_remove_from_resource;
+               goto out_destroy_workqueue;
 
        /* inherit the connection state */
        device->state.conn = first_connection(resource)->cstate;
        drbd_debugfs_device_add(device);
        return NO_ERROR;
 
+out_destroy_workqueue:
+       destroy_workqueue(device->submit.wq);
 out_idr_remove_from_resource:
        for_each_connection(connection, resource) {
                peer_device = idr_remove(&connection->peer_devices, vnr);