list_for_each_entry(entity, &chain->entities, chain) {
                ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback,
                                             &err_ctrl);
-               if (ret < 0)
+               if (ret < 0) {
+                       if (ctrls)
+                               ctrls->error_idx =
+                                       uvc_ctrl_find_ctrl_idx(entity, ctrls,
+                                                              err_ctrl);
                        goto done;
+               }
        }
 
        if (!rollback)
                uvc_ctrl_send_events(handle, ctrls->controls, ctrls->count);
 done:
-       if (ret < 0 && ctrls)
-               ctrls->error_idx = uvc_ctrl_find_ctrl_idx(entity, ctrls,
-                                                         err_ctrl);
        mutex_unlock(&chain->ctrl_mutex);
        return ret;
 }
 int uvc_xu_ctrl_query(struct uvc_video_chain *chain,
        struct uvc_xu_control_query *xqry)
 {
-       struct uvc_entity *entity;
+       struct uvc_entity *entity, *iter;
        struct uvc_control *ctrl;
        unsigned int i;
        bool found;
        int ret;
 
        /* Find the extension unit. */
-       found = false;
-       list_for_each_entry(entity, &chain->entities, chain) {
-               if (UVC_ENTITY_TYPE(entity) == UVC_VC_EXTENSION_UNIT &&
-                   entity->id == xqry->unit) {
-                       found = true;
+       entity = NULL;
+       list_for_each_entry(iter, &chain->entities, chain) {
+               if (UVC_ENTITY_TYPE(iter) == UVC_VC_EXTENSION_UNIT &&
+                   iter->id == xqry->unit) {
+                       entity = iter;
                        break;
                }
        }
 
-       if (!found) {
+       if (!entity) {
                uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n",
                        xqry->unit);
                return -ENOENT;