Error paths didn't spin_unlock. Signed-off-by: Domen Puncer <domen.puncer@xxxxxxxx> Index: linux/sound/oss/au1550_ac97.c =================================================================== --- linux.orig/sound/oss/au1550_ac97.c +++ linux/sound/oss/au1550_ac97.c @@ -214,7 +214,8 @@ rdcodec(struct ac97_codec *codec, u8 add } if (i == POLL_COUNT) { err("rdcodec: read poll expired!"); - return 0; + data = 0; + goto out; } /* wait for command done? @@ -227,7 +228,8 @@ rdcodec(struct ac97_codec *codec, u8 add } if (i == POLL_COUNT) { err("rdcodec: read cmdwait expired!"); - return 0; + data = 0; + goto out; } data = au_readl(PSC_AC97CDC) & 0xffff; @@ -238,6 +240,7 @@ rdcodec(struct ac97_codec *codec, u8 add au_writel(PSC_AC97EVNT_CD, PSC_AC97EVNT); au_sync(); + out: spin_unlock_irqrestore(&s->lock, flags); return data;