diff --git a/drivers/soc/qcom/ipc_router_smd_xprt.c b/drivers/soc/qcom/ipc_router_smd_xprt.c index 513689a58456..c7224515fc4d 100644 --- a/drivers/soc/qcom/ipc_router_smd_xprt.c +++ b/drivers/soc/qcom/ipc_router_smd_xprt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2016, 2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -296,8 +296,10 @@ static void smd_xprt_read_data(struct work_struct *work) spin_lock_irqsave(&smd_xprtp->ss_reset_lock, flags); if (smd_xprtp->ss_reset) { spin_unlock_irqrestore(&smd_xprtp->ss_reset_lock, flags); - if (smd_xprtp->in_pkt) + if (smd_xprtp->in_pkt) { release_pkt(smd_xprtp->in_pkt); + smd_xprtp->in_pkt = NULL; + } smd_xprtp->is_partial_in_pkt = 0; IPC_RTR_ERR("%s: %s channel reset\n", __func__, smd_xprtp->xprt.name); @@ -350,6 +352,7 @@ static void smd_xprt_read_data(struct work_struct *work) __func__, smd_xprtp->xprt.name); kfree_skb(ipc_rtr_pkt); release_pkt(smd_xprtp->in_pkt); + smd_xprtp->in_pkt = NULL; smd_xprtp->is_partial_in_pkt = 0; return; }