Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d0e6775 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: line6: Fix -EBUSY error during active monitoring

When a monitor stream is active, the next PCM stream access results in
EBUSY error because of the check in line6_stream_start().  Fix this by
just skipping the submission of pending URBs when the stream is
already running instead.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=101431


Cc: <stable@vger.kernel.org> # v4.0+
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent d1f15e06
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -186,12 +186,8 @@ static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,
	int ret = 0;

	spin_lock_irqsave(&pstr->lock, flags);
	if (!test_and_set_bit(type, &pstr->running)) {
		if (pstr->active_urbs || pstr->unlink_urbs) {
			ret = -EBUSY;
			goto error;
		}

	if (!test_and_set_bit(type, &pstr->running) &&
	    !(pstr->active_urbs || pstr->unlink_urbs)) {
		pstr->count = 0;
		/* Submit all currently available URBs */
		if (direction == SNDRV_PCM_STREAM_PLAYBACK)
@@ -199,7 +195,6 @@ static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,
		else
			ret = line6_submit_audio_in_all_urbs(line6pcm);
	}
 error:
	if (ret < 0)
		clear_bit(type, &pstr->running);
	spin_unlock_irqrestore(&pstr->lock, flags);