From c3388a075c8ac568f892c40bec919ba8ac4077f0 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 19 Jan 2018 16:22:36 +0300 Subject: rpmsg: smd: Fix double unlock in __qcom_smd_send() We're not holding the lock here, so we shouldn't unlock. Fixes: 178f3f75bb4e ("rpmsg: smd: Don't hold the tx lock during wait") Signed-off-by: Dan Carpenter [bjorn: renamed "out" label to further distinguish the two exit paths] Signed-off-by: Bjorn Andersson --- drivers/rpmsg/qcom_smd.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'drivers/rpmsg') diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c index 10870189c0c8..e92fd0129658 100644 --- a/drivers/rpmsg/qcom_smd.c +++ b/drivers/rpmsg/qcom_smd.c @@ -747,7 +747,7 @@ static int __qcom_smd_send(struct qcom_smd_channel *channel, const void *data, channel->state == SMD_CHANNEL_OPENED) { if (!wait) { ret = -EAGAIN; - goto out; + goto out_unlock; } SET_TX_CHANNEL_FLAG(channel, fBLOCKREADINTR, 0); @@ -759,11 +759,11 @@ static int __qcom_smd_send(struct qcom_smd_channel *channel, const void *data, qcom_smd_get_tx_avail(channel) >= tlen || channel->state != SMD_CHANNEL_OPENED); if (ret) - goto out; + return ret; ret = mutex_lock_interruptible(&channel->tx_lock); if (ret) - goto out; + return ret; SET_TX_CHANNEL_FLAG(channel, fBLOCKREADINTR, 1); } @@ -771,7 +771,7 @@ static int __qcom_smd_send(struct qcom_smd_channel *channel, const void *data, /* Fail if the channel was closed */ if (channel->state != SMD_CHANNEL_OPENED) { ret = -EPIPE; - goto out; + goto out_unlock; } SET_TX_CHANNEL_FLAG(channel, fTAIL, 0); @@ -786,7 +786,7 @@ static int __qcom_smd_send(struct qcom_smd_channel *channel, const void *data, qcom_smd_signal_channel(channel); -out: +out_unlock: mutex_unlock(&channel->tx_lock); return ret; -- cgit v1.2.3-59-g8ed1b