diff options
Diffstat (limited to 'sound/core/compress_offload.c')
| -rw-r--r-- | sound/core/compress_offload.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index c40ae573346..ad11dc99479 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c @@ -100,12 +100,15 @@ static int snd_compr_open(struct inode *inode, struct file *f)  	if (dirn != compr->direction) {  		pr_err("this device doesn't support this direction\n"); +		snd_card_unref(compr->card);  		return -EINVAL;  	}  	data = kzalloc(sizeof(*data), GFP_KERNEL); -	if (!data) +	if (!data) { +		snd_card_unref(compr->card);  		return -ENOMEM; +	}  	data->stream.ops = compr->ops;  	data->stream.direction = dirn;  	data->stream.private_data = compr->private_data; @@ -113,6 +116,7 @@ static int snd_compr_open(struct inode *inode, struct file *f)  	runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);  	if (!runtime) {  		kfree(data); +		snd_card_unref(compr->card);  		return -ENOMEM;  	}  	runtime->state = SNDRV_PCM_STATE_OPEN; @@ -126,7 +130,8 @@ static int snd_compr_open(struct inode *inode, struct file *f)  		kfree(runtime);  		kfree(data);  	} -	return ret; +	snd_card_unref(compr->card); +	return 0;  }  static int snd_compr_free(struct inode *inode, struct file *f)  |