Re: [PATCH v2] ALSA: control: preserve snd_card_file_add() error code in snd_ctl_open()

From: Cezary Rojewski

Date: Wed Jul 08 2026 - 07:03:38 EST


On 7/8/2026 4:35 AM, phucduc.bui@xxxxxxxxx wrote:
From: bui duc phuc <phucduc.bui@xxxxxxxxx>

snd_ctl_open() unconditionally overwrites the return value of
snd_card_file_add() with -ENODEV on failure, discarding the actual
error code.

Fix this by directly returning the original error code returned by
snd_card_file_add() (e.g. -ENOMEM or -ENODEV). This behavior is
consistent with the error handling used in other functions such as
snd_mixer_oss_open(), snd_hwdep_open(), snd_pcm_oss_open(), and others.

There is no functional change other than the returned error code in this
failure path.

BTW, as you've provided a number of positive contributions, a tip for future:

The change is simple and does not relate to any workaround or some kind of 'recommended' sequence. And thus there's no need to be as verbose. IMHO the first paragraph suffices - explicitly answers the _why_ question.

The last is completely redundant - return code is a functional change. Similarly, "Fix this by (...)" in context of such a simple change yields no value for the reader - we see _what_ is happening clearly in the code.
Signed-off-by: bui duc phuc <phucduc.bui@xxxxxxxxx>
---

Changes in v2:
- Update commit messages.
- Drop superfluous braces.

sound/core/control.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/sound/core/control.c b/sound/core/control.c
index 0ca9fff56e51..73d7ba0f509f 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -63,10 +63,8 @@ static int snd_ctl_open(struct inode *inode, struct file *file)
goto __error1;
}
err = snd_card_file_add(card, file);
- if (err < 0) {
- err = -ENODEV;
+ if (err < 0)
goto __error1;
- }
if (!try_module_get(card->module)) {
err = -ENODEV;
goto __error2;