aboutsummaryrefslogtreecommitdiffstats
path: root/sound/core/control.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/core/control.c')
-rw-r--r--sound/core/control.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sound/core/control.c b/sound/core/control.c
index 66d6aaf9314c..9d91f77bc880 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -433,15 +433,16 @@ static int snd_ctl_remove_unlocked_id(struct snd_ctl_file * file,
433 down_write(&card->controls_rwsem); 433 down_write(&card->controls_rwsem);
434 kctl = snd_ctl_find_id(card, id); 434 kctl = snd_ctl_find_id(card, id);
435 if (kctl == NULL) { 435 if (kctl == NULL) {
436 up_write(&card->controls_rwsem); 436 ret = -ENOENT;
437 return -ENOENT; 437 goto error;
438 } 438 }
439 for (idx = 0; idx < kctl->count; idx++) 439 for (idx = 0; idx < kctl->count; idx++)
440 if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) { 440 if (kctl->vd[idx].owner != NULL && kctl->vd[idx].owner != file) {
441 up_write(&card->controls_rwsem); 441 ret = -EBUSY;
442 return -EBUSY; 442 goto error;
443 } 443 }
444 ret = snd_ctl_remove(card, kctl); 444 ret = snd_ctl_remove(card, kctl);
445error:
445 up_write(&card->controls_rwsem); 446 up_write(&card->controls_rwsem);
446 return ret; 447 return ret;
447} 448}